嗨,我需要您的帮助来根据另一个数据框中的值更改另一个数据框中的值。例如,有数据帧A和B。A具有比B多的种类,但具有相同的样本。现在,我想将数据帧A中的值更改为: 1)对于每个样本,不在数据框B中或在数据框B中不存在的物种(值)为“否”; 2)对于在数据框B中不是“ NA”的物种,“是”。
真实数据有很多种类。
数据框A
species1 species2 species3 species4 species5 species6
sample1 0.5 0.3 0 0.5 0 0.5
sample2 0.6 0.5 0 0.5 0.5 0
sample3 0.7 0.7 0 0 0 0
sample4 0.8 0.9 0.5 0.5 0 0
sample5 0.9 1.1 0.5 0.3 0 0.5
数据框B
species2 species5 species3
sample1 NA 0.3 NA
sample2 NA 0.5 NA
sample3 0.7 NA 0.2
sample4 0.8 0.9 0.5
sample5 NA NA 0.5
预期结果如下:
species1 species2 species3 species4 species5 species6
sample1 No No No No Yes No
sample2 No No No No Yes No
sample3 No Yes Yes No No No
sample4 No Yes Yes No Yes No
sample5 No No Yes No No No
非常感谢您。
答案 0 :(得分:0)
使用dplyr
,base
和purrr
:
library(dplyr)
rep_at <- setdiff(names(df1),names(df2))
df1 %>%
mutate_at(vars(rep_at),function(x) x="No") -> df1
replacements <- as.data.frame(purrr::map(df2,function(y)
ifelse(is.na(y), "no","yes")),
stringsAsFactors=F)
df1[,match(names(replacements),names(df1))] <- replacements
df1
结果:
species1 species2 species3 species4 species5 species6
1 No no no No yes No
2 No no no No yes No
3 No yes yes No no No
4 No yes yes No yes No
5 No no yes No no No