rbind.data.frames根据一列R保留唯一行

时间:2016-10-10 12:32:01

标签: r filter dplyr intersect rbind

我有两个不同的数据框,显示2014年和2015年的问卷调查结果,两者都有相同的列。我想将2014年的唯一行(i,例如ID代码)添加到2015年的数据框中。

问题是所有行都是唯一的(因为有23列),但我只希望添加包含唯一ID代码(其中一列)的行,即回答问卷2014而不是2015年的人

使用rbind.data.frames成功创建" 2014-2015数据帧"但后来我要删除那些包含2014年和2015年回答的ID代码的行,以及那些来自2015年的行。

2 个答案:

答案 0 :(得分:0)

使用data.tableunique

library(data.table)
library(magrittr)

# Example data
set.seed(1)
x2014 <- data.table(ID = 1:10, y = rnorm(10))
x2015 <- data.table(ID = 1:10 + 5, y = rnorm(10)) 

# So IDs 6-10 are duplicate

rbind(x2015, x2014) %>%
  setkey(ID) %>%
  unique

注意rbind的顺序很重要。如果您希望将2015保留为保留行的表,则ActiveChart.SetSourceData Source:=Range("Sheet1!$A$1:$G$42") 必须是第一个。

答案 1 :(得分:0)

如果我正确地解释你:

df2014<-structure(list(ID = 1:7, V1 = structure(c(1L, 1L, 1L, 2L, 2L, 
3L, 1L), .Label = c("A", "B", "C"), class = "factor"), V2 = structure(c(2L, 
1L, 2L, 1L, 2L, 3L, 1L), .Label = c("A", "B", "C"), class = "factor"), 
V3 = structure(c(1L, 1L, 2L, 3L, 3L, 3L, 1L), .Label = c("A", 
"B", "C"), class = "factor")), .Names = c("ID", "V1", "V2", 
"V3"), class = "data.frame", row.names = c(NA, -7L))

df2015<-structure(list(ID = 4:10, V1 = structure(c(1L, 1L, 1L, 2L, 2L, 
3L, 1L), .Label = c("A", "B", "C"), class = "factor"), V2 = structure(c(2L, 
1L, 2L, 1L, 2L, 3L, 1L), .Label = c("A", "B", "C"), class = "factor"), 
V3 = structure(c(1L, 1L, 2L, 3L, 3L, 3L, 1L), .Label = c("A", 
"B", "C"), class = "factor")), .Names = c("ID", "V1", "V2", 
"V3"), class = "data.frame", row.names = c(NA, -7L))

library(dplyr)
rbind(dplyr::filter(df2014, !ID %in% intersect(df2014$ID, df2015$ID)), df2015)

结果数据框

    ID V1 V2 V3
1   1  A  B  A
2   2  A  A  A
3   3  A  B  B
4   4  A  B  A
5   5  A  A  A
6   6  A  B  B
7   7  B  A  C
8   8  B  B  C
9   9  C  C  C
10 10  A  A  A