我想创建一个新的数据框,其中只包含两个独立data.frame的公共行。 例如:
data.frame 1
1 id300
2 id2345
3 id5456
4 id33
5 id45
6 id54
data.frame2
1 id832
2 id300
3 id1000
4 id45
5 id984
6 id5456
7 id888
所以我希望我的输出是:
1 id300
2 id45
3 id5456
有什么建议吗?
答案 0 :(得分:14)
此处相应的dplyr
函数为inner_join
(返回df x
中df y
匹配的所有行。)
library(dplyr)
inner_join(df1, df2)
V1
1 id300
2 id5456
3 id45
注意:行按df1
中的顺序返回。如果您inner_join(df2, df1)
id45
,id5456
将会出现在z = np.array([[[0, 0, 0],
[10, 10, 10]],
[[0, 0, 0],
[5, 5, 5]],
[[0, 0, 0],
[2, 2, 2]]])
print(z.mean(axis=2).mean(axis=1))
>[ 5. 2.5 1. ]
之前。
答案 1 :(得分:10)
common <- intersect(data.frame1$col, data.frame2$col)
data.frame1[common,] # give you common rows in data frame 1
data.frame2[common,] # give you common rows in data frame 2
答案 2 :(得分:5)
使用merge
new_data_frame <- merge(data.frame1, data.frame2)
我假设每个数据框中只有一列,并且它们在两个帧中都具有相同的名称。如果不使用要与by.x = "nameCol1"
和by.y = "nameCol2"
相交的列,其中nameCol是真正的列名。
在第一次评论后添加
如果任何数据框中有更多列,则命令是相同的。这样做:
>a #Data frame 1
c1 c2
1 id300 6
2 id2345 5
3 id5456 4
4 id33 3
5 id45 2
6 id54 1
> b #Data frame 2
a f
1 asd 12
2 id33 10
3 id45 8
4 id54 6
如您所见,它们不共享列名,每个列有2列。所以:
> merge(a,b, by.x = "c1", by.y = "a")
c1 c2 f
1 id33 3 10
2 id45 2 8
3 id54 1 6
剩下的唯一行是在所选列中具有相同条目的那些行。
答案 3 :(得分:3)
我们也可以在将fintersect
转换为data.table
data.frame
中的data.table
执行此操作
library(data.table)
fintersect(setDT(df1), setDT(df2))
# v1
#1: id300
#2: id45
#3: id5456
df1 <- structure(list(v1 = c("id300", "id2345", "id5456", "id33", "id45",
"id54")), .Names = "v1", class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6"))
df2 <- structure(list(v1 = c("id832", "id300", "id1000", "id45", "id984",
"id5456", "id888")), .Names = "v1", class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6", "7"))
答案 4 :(得分:0)
要实现这一点,您应该在两个数据框中分配行名,然后在R中使用intersect进行处理。这可以使用以下命令来实现:
intersect(dataframe.1$V1,dataframe.2$V2)
答案 5 :(得分:0)
使用dplyr包的intersect函数
安装这个包
像这样使用这个函数
var_name <- intersect(第一个数据集的名称,第二个数据集的名称)
关于这个最好的事情是它也可以与字符一起使用,而合并和内连接不能给出结果 您也可以使用此功能查看它们在数据集上的位置
for (i in (no. of duplicates ) ) {
for (j in ( no. of rows in other dataset ) ) {
if (new[i] == ac$variable_name[j]) {
print(j)
}
}
}