如何在另一个数据帧的基础上更改一个数据帧的值?

时间:2019-07-06 12:55:21

标签: r

嗨,我需要您的帮助来根据另一个数据框中的值更改另一个数据框中的值。例如,有数据帧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

非常感谢您。

1 个答案:

答案 0 :(得分:0)

使用dplyrbasepurrr

    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