下面是我的两个数据帧,df1和df2

df1 <- data.frame(id=c("632592651","633322173","634703802","634927873","635812953","636004739","636101211","636157799","636263106","636752420"),text=c("asdf","cat","dog","mouse","elephant","goose","rat","mice","kitty","kitten"),response=c("y","y","y","n","n","y","y","n","n","y"))

id     text response
1  632592651     asdf        y
2  633322173      cat        y
3  634703802      dog        y
4  634927873    mouse        n
5  635812953 elephant        n
6  636004739    goose        y
7  636101211      rat        y
8  636157799     mice        n
9  636263106    kitty        n
10 636752420   kitten        y

df2 <- data.frame(id=c("632592651","633322173","634703802","634927873","635812953","636004739","636101211","636157799","636263106","636752420","636809222","2004722036","2004894388","2005045755","2005535472","2005630542","2005788781","2005809679","2005838317","2005866692"),
                  text=c("asdf_xyz","cat","dog","mouse","elephant","goose","rat","mice","kitty","kitten","tiger_xyz","lion","leopard","ostrich","kangaroo","platypus","fish","reptile","mammals","amphibians_xyz"),
                  volume=c("1234","432","324","333","2223","412346","7456","3456","2345","2345","6","345","23","2","4778","234","8675","3459","8","9"))

 id           text volume
1   632592651       asdf_xyz   1234
2   633322173            cat    432
3   634703802            dog    324
4   634927873          mouse    333
5   635812953       elephant   2223
6   636004739          goose 412346
7   636101211            rat   7456
8   636157799           mice   3456
9   636263106          kitty   2345
10  636752420         kitten   2345
11  636809222      tiger_xyz      6
12 2004722036           lion    345
13 2004894388        leopard     23
14 2005045755        ostrich      2
15 2005535472       kangaroo   4778
16 2005630542       platypus    234
17 2005788781           fish   8675
18 2005809679        reptile   3459
19 2005838317        mammals      8
20 2005866692 amphibians_xyz      9

我想创建一个数据帧df3,它返回的行值与df1和df2中的列"id"和"text"匹配,但将NA返回到"text"列中的不匹配项

df3的期望输出:

 id   text response volume
1  632592651       NA        y   1234
2  633322173      cat        y    432
3  634703802      dog        y    324
4  634927873    mouse        n    333
5  635812953 elephant        n   2223
6  636004739    goose        y 412346
7  636101211      rat        y   7456
8  636157799     mice        n   3456
9  636263106    kitty        n   2345
10 636752420   kitten        y   2345

我所try 的:

df3 <- df1 %>%
  anti_join(df2, by = c("id","text"))

然后,我将"text"列中的所有非零值更改为NA

df3$text[df3$text != 0] <- NA

df1和df2之间的Internal\u是否联接以获得df4(匹配"id"和"文本")

df4 <- df1 %>% 
    inner_join(df2, by = c("id","text"))

和inner\u将df5与df3连接起来,以添加"volume"列

df5 <- df3 %>%
  inner_join(df2, by= c("id")) %>%
  select(id,text.x,response,volume)

更改列名文本."x"到"text"

colnames(df5)[colnames(df5)%in%c("text.x")] <- c("text")

最后绑定df4和df5以获得所需的输出:

df6 <- rbind(df5,df4)

id     text response volume
1  632592651     <NA>        y   1234
2  633322173      cat        y    432
3  634703802      dog        y    324
4  634927873    mouse        n    333
5  635812953 elephant        n   2223
6  636004739    goose        y 412346
7  636101211      rat        y   7456
8  636157799     mice        n   3456
9  636263106    kitty        n   2345
10 636752420   kitten        y   2345

如果我有很多专栏的话,处理起来会非常困难.有人能建议如何简化这种方法吗?提前感谢.

推荐答案

使用dplyr并仅连接by"id",可以将其简化为:

library(dplyr)

inner_join(x = df1, 
           y = df2, 
           by = "id") %>%
  mutate_if(is.factor, as.character) %>%
  mutate(text = ifelse(test = text.x != text.y, 
                       yes = NA, 
                       no = text.x)) %>%
  select(id, text, response, volume)

#>           id     text response volume
#> 1  632592651     <NA>        y   1234
#> 2  633322173      cat        y    432
#> 3  634703802      dog        y    324
#> 4  634927873    mouse        n    333
#> 5  635812953 elephant        n   2223
#> 6  636004739    goose        y 412346
#> 7  636101211      rat        y   7456
#> 8  636157799     mice        n   3456
#> 9  636263106    kitty        n   2345
#> 10 636752420   kitten        y   2345

R相关问答推荐

带有叠加饼图系列的Highmap

pickerInput用于显示一条或多条geom_hline,这些线在图中具有不同 colored颜色

如果行和大于值,则过滤

lightgbm发动机在tidymmodels中的L1正则化""

提取具有连续零值的行,如果它们前面有R中的有效值

如何在所有绘图中保持条件值的 colored颜色 相同?

R spatstat Minkowski Sum()返回多个边界

DEN扩展包中的RECT树形图出现异常行为

如何使用同比折线图中的个别日

从数据创建数字的命名列表.R中的框

`-`是否也用于数据帧,有时使用引用调用?

如何阻止围堵地理密度图?

网络抓取新闻标题和时间

如何在R中创建这些列?

随机生成样本,同时在R内的随机样本中至少包含一次所有值

如何根据分位数及其值创建格式化字符串值的数组?

使用`ggsurvfit::ggsurvfit()`

Gg森林未显示其中一个变量的引用组

对数据帧中的大量组合执行Kruskal-Wallis测试

匹配名字相似的人:r