我是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
答案 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);
}
}
为key
和age
,您可以这样做:
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
合并tuse2
和age
。此外,如果d1
和NA
相同,tuse1
中的tuse2
值将替换为age
中的相应值。
数据强>
d1