我有两个数据帧需要在R中合并.在合并之前我不能真正修改它们,它们共享许多列,但在复制的列中没有重叠的值,如果一列中的一行有值,则复制的列中的同一行是NA.合并后,我的代码如下所示:
df1 <- data.frame(id = c(1,2,3,4),
Var1 = c(1,2,NA,NA),
Var2 = c("a","b",NA,NA))
df2 <- data.frame(id = c(1,2,3,4),
Var1 = c(NA,NA,3,4),
Var2 = c(NA,NA,"c","d"))
mergedData <- merge(df1, df2, by = "id")
mergedData <- mergedData[, c("Var1.x", "Var1.y", "Var2.x", "Var2.y")]
print(mergedData)
Var1.x Var1.y Var2.x Var2.y
1 1 NA a <NA>
2 2 NA b <NA>
3 NA 3 <NA> c
4 NA 4 <NA> d
我编写了一个在其他脚本中使用的函数,该函数合并两列,然后删除其中一列:
mergeColumns <- function(df, colToRemove, colToKeep) {
df[[colToKeep]][is.na(df[[colToKeep]])] <- df[[colToRemove]][is.na(df[[colToKeep]])]
df[[colToRemove]] <- NULL
names(df)[names(df) %in% colToKeep] <- gsub(".x|.y", "", names(df)[names(df) %in% colToKeep])
return(df)
}
在处理单列时,这种方法工作得很好(尽管我确信有一种更干净的方法).然而,在我合并的数据帧中,我有许多列需要合并.我不确定做这件事的最好方法.我想过创建一个需要合并的列的数据帧,并try 使用Apply函数系列,但没有成功(我知道下面的方法不太可能奏效,但我认为它可能会让我朝着正确的方向前进):
duplicatedColumns <- data.frame(colstoKeep = c("Var1.x", "Var2.x'"),
coltoRemove = c("Var1.y", "Var2.y"))
lapply(data, mergeColumns(duplicatedColumns$sampleIntakeCols, duplicatedColumns$rnaMetadataCols))
>Error in match.fun(FUN) : argument "FUN" is missing, with no default
任何关于我如何才能让这件事变得更好的洞察力都将不胜感激.R垒更可取.先谢谢你.