在R中查找公共行

时间:2015-05-18 20:35:09

标签: r dataframe unique

在尝试让我的数据适合分析时,我似乎无法正确地做到这一点。假设我有这种形式的数据集:

df1

V1  V2df1
a   H
b   Y
c   Y

df2

V1  V2df2
a   Y
j   H
b   Y

和另外三个(共5个不同长度的数据集)。我想要做的是以下内容。首先,我必须找到第一列(V1)中的所有常见元素 - 在这种情况下,它们是:a,b。然后根据这些常见元素,我尝试构建一个连接数据集,其中V1的值对所有五个数据集都是通用的,而其他列的值将附加在同一行中。所以用一个例子来解释, 我的结果应该类似于:

V1  V2df1  V2df2
a   H      Y
b   Y      Y

我设法让一些代码工作,但显然结果不正确。我做了什么: 将所有文件中的所有行读入变量(例如:a<-df1[,1]等)并查找常见行,如:

red<-Reduce(intersect, list(a,b,c,d,e))

然后我过滤了特定的数据集,如:

df1 <-  unique(filter(df1, V1 %in% red))

我按行排序了每个数据集:

df1<-data.frame(df1[with(df1, order(V1)),])

并删除了重复项(第一列中的元素):

df1<- df1[unique(df1$V1),]

然后我创建了一个新的数据集:

newdata<-data.frame(V1common=df1[,1], V2df1=df1[,2],V2df2=df2[,2]...)

...表示所有五个数据集。我实际上得到了相同数量的行(一个好的符号,因为在交集中有相同数量的行),然后附加其他排序列,但有些东西并没有加起来。谢谢你的建议。 (我省略了使用库等等,代码用于说明目的)。

1 个答案:

答案 0 :(得分:7)

您可以使用join_all

中的plyr
require(plyr)
df <- join_all(list(df1,df2,df3,df4, df5), by = 'V1', type = 'inner')
相关问题