在 R 中查找公共行
Finding common rows in R
在尝试使我的数据适合分析时,我似乎无法正确地做到这一点。假设我有一个这种形式的数据集:
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]...)
... 表示所有五个数据集。我实际上得到了相同数量的行(这是一个好兆头,因为交集内有相同数量的行),然后附加了其他排序的列,但有些东西并没有加起来。感谢您的任何建议。 (我省略了库等的使用,代码是为了说明目的)。
您可以使用 plyr
包中的 join_all
require(plyr)
df <- join_all(list(df1,df2,df3,df4, df5), by = 'V1', type = 'inner')
在尝试使我的数据适合分析时,我似乎无法正确地做到这一点。假设我有一个这种形式的数据集:
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]...)
... 表示所有五个数据集。我实际上得到了相同数量的行(这是一个好兆头,因为交集内有相同数量的行),然后附加了其他排序的列,但有些东西并没有加起来。感谢您的任何建议。 (我省略了库等的使用,代码是为了说明目的)。
您可以使用 plyr
包中的 join_all
require(plyr)
df <- join_all(list(df1,df2,df3,df4, df5), by = 'V1', type = 'inner')