如何在R中将 Dataframe 的多个列合并为一个?

eh57zj3b  于 2023-04-27  发布在  其他
关注(0)|答案(2)|浏览(138)

我再次问一个与R/dataframe相关的问题。最近,我已经开始实现merge()函数,但是我需要帮助在将不同的相似 Dataframe 合并在一起之后合并一些相同的列。

library(dplyr)  
    library(tidyr)  
    library(stringr)  
    DF1 = data.frame(ID=c("A","B","C"), TagNo=c(10,20,20),Info=c("Metal","Plastic","Wood"))
    DF2 = data.frame(ID=c("A","D","E"), TagNo=c(10,30,100),Info=c("Wood","Metal","Wood"))
    DF3 = data.frame(ID=c("B","C","F"), TagNo=c(20,20,40),Info=c("Glass","Metal","Wood"))
    dfmerge <- merge(DF1,DF2,by="ID",all.x=TRUE, all.y=TRUE)
    dfmerge <- merge(dfmerge,DF3,by="ID",all.x=TRUE, all.y=TRUE)

合并后的dataframe看起来像这样:
| ID|标记号|Info.x|标签编号|Info.y|标记号|新闻资讯|
| --------------|--------------|--------------|--------------|--------------|--------------|--------------|
| 一个|10个|金属|10个|木材|不适用|不适用|
| B|二十|塑料|不适用|不适用|五十|玻璃|
| C|二十|木材|不适用|不适用|二十|金属|
| D|不适用|不适用|三十|金属|不适用|不适用|
| E级|不适用|不适用|一百|木材|不适用|不适用|
| F|不适用|不适用|不适用|不适用|四十|木材|
我基本上想把TagNo列压缩成一个Tag列。为了突出一些重要的东西。每个样本至少有1个TagNo,如果它有超过1个,它将总是相同的。我不必担心它们是不同的。
这是我需要的结果:
| ID|标签编号x|Info.x|Info.y|新闻资讯|
| --------------|--------------|--------------|--------------|--------------|
| 一个|10个|金属|木材|不适用|
| B|二十|塑料|不适用|玻璃|
| C|二十|木材|不适用|金属|
| D|三十|不适用|金属|不适用|
| E级|一百|不适用|木材|不适用|
| F|四十|不适用|不适用|木材|
有人知道如何解决这个问题吗?我感谢任何帮助。[列标题不是一个大问题,因为我可以简单地解决这个问题后,与colnames(dfmerge)〈-...

dphi5xsq

dphi5xsq1#

您是否正在寻找dplyr连接功能?

library(dplyr)  
DF1 = data.frame(ID=c("A","B","C"),TagNo=c(10,20,20),Info=c("Metal","Plastic","Wood"))
DF2 = data.frame(ID=c("A","D","E"), TagNo=c(10,30,100),Info=c("Wood","Metal","Wood"))
DF3 = data.frame(ID=c("B","C","F"), TagNo=c(20,20,40),Info=c("Glass","Metal","Wood"))

DF1%>%
full_join(DF2,by=c("ID","TagNo"))%>%
full_join(DF3,by=c("ID","TagNo"))          
#>   ID TagNo  Info.x Info.y  Info
#> 1  A    10   Metal   Wood  <NA>
#> 2  B    20 Plastic   <NA> Glass
#> 3  C    20    Wood   <NA> Metal
#> 4  D    30    <NA>  Metal  <NA>
#> 5  E   100    <NA>   Wood  <NA>
#> 6  F    40    <NA>   <NA>  Wood

创建于2023-04-26带有reprex v2.0.2

ttcibm8c

ttcibm8c2#

试试这个:

dfmerge <- merge(DF1,DF2,by=c("ID", "TagNo"),all.x=TRUE, all.y=TRUE)
dfmerge <- merge(dfmerge,DF3,by=c("ID", "TagNo"),all.x=TRUE, all.y=TRUE)

相关问题