Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 多栏合并_R_Merge - Fatal编程技术网

R 多栏合并

R 多栏合并,r,merge,R,Merge,如果这不是重复的话,我很惊讶,但是我在其他地方找不到答案 我有两个数据帧,data1和data2,它们在一列中不同,但其余的列是相同的。我想将它们合并到一个唯一的标识列,id。但是,如果来自data2的ID在data1中不匹配,我希望data2中的条目附加在底部,类似于plyr::rbind.fill()而不是将data2中的所有对应列重命名为column1.x和column1.y。我意识到这不是最清楚的解释,也许我不应该在周六工作。以下是创建两个数据帧和所需输出的代码: spp1 <-

如果这不是重复的话,我很惊讶,但是我在其他地方找不到答案

我有两个数据帧,
data1
data2
,它们在一列中不同,但其余的列是相同的。我想将它们合并到一个唯一的标识列,
id
。但是,如果来自
data2
的ID在
data1
中不匹配,我希望
data2
中的条目附加在底部,类似于
plyr::rbind.fill()
而不是将data2中的所有对应列重命名为
column1.x
column1.y
。我意识到这不是最清楚的解释,也许我不应该在周六工作。以下是创建两个数据帧和所需输出的代码:

spp1 <- c('A','B','C')
spp2 <- c('B','C','D')
trait.1 <- rep(1.1,length(spp1))
trait.2 <- rep(2.0,length(spp2))
id_1 <- c(1,2,3)
id_2 <- c(2,9,7)

data1 <- data.frame(spp1,trait.1,id_1)
data2 <- data.frame(spp2,trait.2,id_2)
colnames(data1) <- c('spp','trait.1','id')
colnames(data2) <- c('spp','trait.2','id')
  spp trait.1 trait.2 id
1   A     1.1      NA  1
2   B     1.1       2  2
3   C     1.1      NA  3
4   C      NA       2  9
5   D      NA       2  7
试试这个:

library(dplyr)

full_join(data1, data2, by = c("id", "spp"))
输出:

  spp trait.1 id trait.2
1   A     1.1  1      NA
2   B     1.1  2       2
3   C     1.1  3      NA
4   C      NA  9       2
5   D      NA  7       2
或者,
merge
也可以:

merge(data1, data2, by = c("id", "spp"), all = TRUE)