r - 更新 R 数据框中的值

标签 r compare

我是 R 编程新手,我想知道是否有办法通过比较 2 个文件来更新值。

例如,我有我的主表 df_table1:

Date           Metric1     Metric2     Metric3
1/1/2018       25          4.6         49
2/1/2018       6           3.6         67
3/1/2018       18          2.6         36
4/1/2018       56          3.6         29

我正在迭代地浏览文件夹中的各种文件,并且我碰巧有一个文件也包含一些具有相同日期值的重叠数据,df_table2:

Date           Metric1    Metric2      Metric3
3/1/2018       19         2.9          47
4/1/2018       78         5.7          35
5/1/2018       46         3.3          29

组合数据文件的常用方法是使用 rbind(),但我相信这会为 df_table2 中找到的 2 个日期创建重复值。

有没有一种方法可以有效地进行比较,检查所有后续文件中的重叠日期,并根据 df_table1 中的日期替换其相应的值?

理想情况下,如果 df_table2 中的所有指标的值都大于 df_table1 中的值,那么如果有一种方法可以只进行替换,那就更好了。

总而言之,我希望最终输出通过某种特殊的 rbind() 函数成为 df_table1 和 df_table2 的组合,并且值从 df_table2 更新而没有重复:

Date           Metric1    Metric2      Metric3
1/1/2018       25         4.6          49
2/1/2018       6          3.6          67
3/1/2018       19         2.9          47       #updated from df_table2
4/1/2018       78         5.7          35       #updated from df_table2
5/1/2018       46         3.3          29       #new value from df_table2

谢谢!

最佳答案

我们先定义一下数据(以后请自己定义数据,以便人们更容易帮助你):

df_table1= data.frame(Date=c('1/1/2018','2/1/2018','3/1/2018','4/1/2018'), 
Metric1 = c(25,6,18,56),
Metric2 = c(4.6,3.6,2.6,3.6),
Metric3 = c(49,67,36,29))

df_table2= data.frame(Date=c('3/1/2018','4/1/2018','5/1/2018'), Metric1 = c(19,78,46),
Metric2 = c(2.9,5.7,3.3),
Metric3 = c(48,35,29))

接下来我将合并表,然后重新创建您需要的变量。第一个是我给你写的,其他的应该很简单。您可以比较哪个变量更大并选择您想要的变量,而不是仅仅使用 is.na() 。

df = merge(df_table1, df_table2, by='Date', all=TRUE)
df$Metric1 = df$Metric1.y
df$Metric1[is.na(df$Metric1)]  = df$Metric1.x[is.na(df$Metric1)] 
df
   Date    Metric1.x Metric2.x Metric3.x Metric1.y Metric2.y Metric3.y Metric1
1 1/1/2018        25       4.6        49        NA        NA        NA      25
2 2/1/2018         6       3.6        67        NA        NA        NA       6
3 3/1/2018        18       2.6        36        19       2.9        48      19
4 4/1/2018        56       3.6        29        78       5.7        35      78
5 5/1/2018        NA        NA        NA        46       3.3        29      46

关于r - 更新 R 数据框中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53558890/

相关文章:

r - 将相似的列与不同的角色名称数据合并?

r - 如何循环遍历 R 中的 CSV 文件文件夹

r - 想知道如何输出我在经济学家杂志上看到的图表

python - R 中的 numpy.memmap (Python) 等效吗?

java - 如何迭代两个列表并比较其中的项目?

java - 具有嵌套对象的对象的两个实例与动态比较(选项/规则/参数)

python - Pandas 中两个数据框之间的差异

windows - 是否可以检索使用 file.remove 删除的文件?

Vbscript - 如果比目标文件新,则比较并复制文件夹中的文件

c# - 如何比较两个 char[] 数组的等价性?