【发布时间】:2017-11-26 05:46:45
【问题描述】:
我有一个数据框df1,其中有一个名为lepsp 和ID 的因子,还有一个带有lepsp_updates 和matchID 的因子的第二个数据框df2。我需要用df2 中的lepsp_updates 更新df1 中的所有lepsp 信息。
这将需要覆盖/替换一些当前的lepsp 级别或填写该列的空白条目。但是,目前lepsp_updates 的许多条目都有NA,我不希望NA 替换lepsp 的当前条目。这是当前的数据框:
df1<- data.frame(ID= seq(1,10, 1),
lepsp= c("A", "B", "", "C", "B", "","", "A", "B" , "C"))
df2<- data.frame(matchID= c("2","3", "8"),
lepsp_updates= c("C", "E", "B"))
输出如下所示:
output<- data.frame(ID= seq(1,10, 1),
lepsp= c("A", "C", "E", "C", "B", "","", "B", "B" , "C"))
ID 2 B 的通知被替换为 C 并且 ID3 E 替换了空白条目。 df1 的所有其他原始条目保持不变。
我尝试过以下版本:
df1$lepsp<- df2$lepsp_updated[match(df1$ID, df2$matchID)]
或使用更新向 df1 添加一列,然后合并列。
df1 <- transform(df1, lepsp_updated = ifelse(is.na(lepsp_updated),lepsp, lepsp_updated))
但因子要么更改为数字,要么数据被覆盖,只保留一个因子级别的数据。
【问题讨论】:
标签: r