如何从多个数据框中查找公共对/组

时间:2018-01-29 06:36:08

标签: python r grouping

我的数据框很少

DF1       DF2      DF3      DF4

A  1     A  2      A  1     A  1
B  2     B  2      B  2     B  2
C  3     C  3      C  4     C  3
D  2     D  4      D  3     D  4
E  4     E  1      E  2     E  3
F  2     F  2      F  2     F  2
G  3     G  1      G  4     G  3

此处,数字表示组(具有相同编号的字母在同一组中)。与DF1类似,(B,D,F)有2个,因此它们属于同一组。

我想弄清楚所有数据帧中哪些组可用(如(B,F)在所有数据帧中都在同一组中。同样,(C,G)在2个数据帧的同一组中。 因此,我希望在所有数据框中可以获得哪个组(可以超过2个成员),如果它们始终不可用,则它们在同一组中的次数。 R和Python代码更可取。

1 个答案:

答案 0 :(得分:0)

这应该有用,总列列出了特定字母在数据框中显示的次数。

df <- data.frame(grp = LETTERS[1:7], 
                 df1 = c(1,2,3,2,4,2,3), 
                 df2 = c(2,2,3,4,1,2,1), 
                 df3 = c(1,2,4,3,2,2,4), 
                 df4 = c(1,2,3,4,3,2,3))

# Create a new column which counts the maximum number of times the letter
# has the same group in each dataset.

df$total <- apply(df[, 2:ncol(df)], 1, function(row) max(table(row)))

  grp df1 df2 df3 df4 total
1   A   1   2   1   1     3
2   B   2   2   2   2     4
3   C   3   3   4   3     3
4   D   2   4   3   4     2
5   E   4   1   2   3     1
6   F   2   2   2   2     4
7   G   3   1   4   3     2

# Show the rows for which the letters are present in the same group 
# across all datasets. 

df[df$total == ncol(df)-2,]

  grp df1 df2 df3 df4 total
2   B   2   2   2   2     4
6   F   2   2   2   2     4