您好,我有两个数据框,如下所示:
df1:
ID x y z
1 a b c
2 a b c
3 a b c
4 a b c
Run Code Online (Sandbox Code Playgroud)
和 df2:
ID x y
2 d NA
3 NA e
Run Code Online (Sandbox Code Playgroud)
我正在追求这样的结果:
df1:
ID x y z
1 a b c
2 d b c
3 a e c
4 a b c
Run Code Online (Sandbox Code Playgroud)
我一直在尝试按照其他一些帖子的建议使用匹配函数,但我不断遇到问题,其中我的 df1 数据帧被 df2 中的 NA 值替换。这是我一直在使用但运气不佳的代码
for (i in names(df2)[2:length(names(df2))]) {
df1[i] <- df2[match(df1$ID, df2$ID)]
}
Run Code Online (Sandbox Code Playgroud)
谢谢
你的代码不适合我,所以我稍微改变了一下,但它有效。如果您正在从外部文件读取数据,请在stringAsFactor = FALSE读取数据时使用 ,这样就不会遇到问题。
df1 = data.frame("ID" = 1:4,"x" = rep("a",4), "y" =rep("b",4),"z" = rep("c",4),
stringsAsFactors=FALSE)
df2 = data.frame("ID" = 2:3,"x" = c("d",NA), "y" = c(NA,"e"),stringsAsFactors=FALSE)
for(i in 1:nrow(df2)){
new_data = df2[i,-which(apply(df2[i,],2,is.na))]
pos = as.numeric(new_data[1])
col_replace = intersect(colnames(new_data),colnames(df1))
df1[pos,col_replace] = new_data
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1688 次 |
| 最近记录: |