按其他2个数据帧的列值过滤数据帧

时间:2015-10-27 20:58:28

标签: r merge dataframe

我有这两个数据帧( dats datxt ):

> head(dats)
  idpatient entryear  sex   infection
1         1     1995 Male HCV+ & HIV-
2         2     1995 Male HCV+ & HIV-
3         3     1995 Male HCV+ & HIV-
4         4     1995 Male HCV+ & HIV-
5         5     1995 Male HCV+ & HIV-
6         6     1995 Male HCV+ & HIV-

> head(datxt)
  idpatient entryear    sex   infection timeaddic
1        54     1996 Female HCV+ & HIV-       168
2        55     1996 Female HCV+ & HIV-        96
3        56     1996 Female HCV+ & HIV-       108
4        57     1996 Female HCV+ & HIV-        60
5        58     1996 Female HCV+ & HIV-        96
6        59     1996   Male HCV+ & HIV-        24

另一方面,我将这两个合并为另一个( mergedDataset ):

> tail(**mergedDataset**)
    idpatient entryear    sex   infection timeaddic
358       358     2004   Male HCV+ & HIV+       180
359       359     2004   Male HCV+ & HIV+       288
360       360     2004 Female HCV+ & HIV+       192
361       361     2004   Male HCV+ & HIV-        60
362       362     2004   Male HCV+ & HIV-       108
363       363     2004   Male HCV+ & HIV+       252

如何从dats和datxt中包含的患者中提取megedDataset中的数据?我试过这个但是没有用:

finalData <- mergedData[dats$idpatient == datxt$idpatient,]

你能帮帮我吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

如果使用merge()合并数据集,则新数据集仅包含参数,具体取决于参数  两个数据集中的对象(由唯一ID确定)。

df1<-data.frame(id= 1:5, x = rnorm(5))
df2<-data.frame(id=c(1:3,5:6),y=rnorm(5))

>merge(df1,df2)

  id          x          y
1  1  0.3623482 -0.1592616
2  2 -0.8280637 -0.9261413
3  3  1.0900202  0.2681832
4  5  0.7551957 -0.1201221

df<-merge(df1,df2, all = TRUE)
>df
 id          x          y
1  1  0.3623482 -0.1592616
2  2 -0.8280637 -0.9261413
3  3  1.0900202  0.2681832
4  4 -0.0620777         NA
5  5  0.7551957 -0.1201221
6  6         NA  0.8578393

这最接近你的方法:

ids<-df1$id[df1$id %in% df2$id]
>df[df$id %in% ids, ]

  id          x          y
1  1  0.3623482 -0.1592616
2  2 -0.8280637 -0.9261413
3  3  1.0900202  0.2681832
4  5  0.7551957 -0.1201221

您尝试过的内容:

filter<-match(df1$id,df2$id)
>na.omit(df[filter,])

   id          x          y
1  1  0.3623482 -0.1592616
2  2 -0.8280637 -0.9261413
3  3  1.0900202  0.2681832

这似乎不对。