如何通过将列与另一个data.frame中的列进行比较来从data.frame中创建子集?

时间:2018-09-27 18:47:01

标签: r

Data1是1列的数据帧,具有唯一的编号(各种主键)。

Data2是一个具有11列的数据框。最后一列是唯一数字(主键)。

我想创建一个Data2的子集,每行的唯一编号与Data1中的唯一编号相同(第11列中的主键)。我尝试使用哪个功能:

data2_new <- which(data2[,11]== data1[,1])

但这会导致错误:

Error in Ops.factor: level sets of factors are different. 

请引导我

2 个答案:

答案 0 :(得分:0)

data<-data2[data2$keys==data1$keys,]

或者,您可以只做一个left_join:

data<-dplyr::left_join(data1, data2, by="keys")

答案 1 :(得分:0)

假设您具有数据帧1(使用主键)

df1 <- data.frame(primary_key = c(1, 3, 5, 6, 8))

> df1
  primary_key
1           1
2           3
3           5
4           6
5           8

df2 <- data.frame(
  col_11 = c(0:9),
  letter = c("A", "A", "A", "A", "A", "B", "B", "B", "B", "B"), 
  value = c(1, 1, 3, 1, 2, 1, 3, 4, 5, 2))
> df2
   col_11 letter value
1       0      A     1
2       1      A     1
3       2      A     3
4       3      A     1
5       4      A     2
6       5      B     1
7       6      B     3
8       7      B     4
9       8      B     5
10      9      B     2

您可以使用dplyr::left_join将这些数据帧“合并”在一起。

df2 %>% # the data you want to subset
  semi_join(df1, by = c("col_11" = #the name of your "sort of primary key" column in dataframe2
                          "primary_key")) # the name of your column in dataframe 1

       col_11 letter value
    1      1      A     1
    2      3      A     1
    3      5      B     1
    4      6      B     3
    5      8      B     5

如果键名相同,则可以。

df2 %>% # the data you want to subset
  semi_join(df1, by = "primary_key")

semi_join帮助子集df2。