使用另一个数据框更新数据框的多个列

时间:2016-06-11 22:30:06

标签: r dataframe

我是R的新手用户,我遇到了以下问题。

我正在尝试合并超过2个数据帧。我在合并时有5个副变量,在两个数据帧中有几个其他重叠列。我试图用一个数据框更新这些重叠变量。我搜索了这个网站并找到了一些答案,但在我的案例中没有一个是有效的。原因是我有几列需要更新,其次,因为我将最终合并100个月度数据,我不总是知道重叠列的名称。以前的解决方案通常通过在代码中写入每列的名称来更新,但我试图找到一种方法来执行它而不使用它们的名称。

举个例子,让我们说..

flex-wrap: nowrap

我想按年龄和d1合并tuse1和tuse2。我想要一个代码,可以使用tuse2更新tuse1 NA变量而不使用代码中的列名。

这是我的代码:

tuse1
age d1 a1 a2 a3 a4 a5
1   89 2  3  3  NA NA
2   34 3  4  5  NA NA

tuse2
age d1 a1 a2  a3 a4 a5 a6
1   89 2  3   3  3  6  2
2   34 3  4   5  4  7  2
3   32 4  3   3  6  6  6

此代码似乎没有任何错误,但遗憾的是没有提供所需的输出。

我正在看的所需输出如下:

key = c("age", "d1")
comNam = intersect(names(tuse1), names(tuse2))
comNam = comNam[3:length(comNam)]
merge_second_age = merge(x = tuse1, y = tuse2, all = TRUE, by = c(key))

for(i in comNam){
  left <- paste(i, ".x", sep="")
  right <- paste(i, ".y", sep="")

merge_second_age$i = with(merge_second_age, factor(ifelse(is.na(left), right, left)))
merge_second_age$left = NULL; merge_second_age$right = NULL
merge_second_age$left = NULL; merge_second_age$right = NULL

}

我将不胜感激任何帮助。

最佳

Dilsat

1 个答案:

答案 0 :(得分:0)

假设您的private void checkReadPermission() { if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 3); } } keyage,您可以这样做:

d1

如果您的common=tuse2[intersect(match(tuse1$age,tuse2$age), match(tuse1$d1,tuse2$d1)),] 长度超过key,则可以执行以下操作:

2

将提供您提供的相同输出:

common=tuse2[Reduce(intersect, list(
match(tuse1$age,tuse2$age), 
match(tuse1$d1,tuse2$d1),
match(tuse1$a1,tuse2$a1),
match(tuse1$a2,tuse2$a2),
match(tuse1$a3,tuse2$a3)))
,]

也就是说, age d1 a1 a2 a3 a4 a5 a6 1 1 89 2 3 3 3 6 2 2 2 34 3 4 5 4 7 2 tuse1合并tuse2age。此外,如果d1NA相同,tuse1中的tuse2值将替换为age中的相应值。

数据

d1