在R中的某些列上查找重复的行

时间:2018-03-26 07:20:44

标签: r dataframe count grouping

我有以下数据框:

# A tibble: 13 x 2
     val Tracking
    <dbl>    <int>
 1    36        1
 2    36        2
 3    36        3
 4    36        4
 5    18        5
 6    18        6
 7     1        1
 8     7        2
 9     7        3
10     7        4
11     7        5
12     7        6
13    20        1

“跟踪”列表示该值出现在第二个数据帧的哪一行。因此,例如,值36出现在第二数据帧的行1,2,3,4中。

现在,我想构建一个函数,它返回出现在同一行中的值,以及多少次。例如,值36和7都出现在2,3,4行中,所以我的输出应该是(36,7,c(2,3,4))。

我已经构建了表格

T_d <-  table(df_d$val, df_d$Tracking)

     1 2 3 4 5 6
  1  1 0 0 0 0 0
  7  0 1 1 1 1 1
  18 0 0 0 0 1 1
  20 1 0 0 0 0 0
  36 1 1 1 1 0 0

但它仍然不是我需要的。

我需要一个高性能的解决方案,适用于非常大的数据帧,如果可能的话,还需要dplyr而不是data.table(我不会说data.table .... :)

3 个答案:

答案 0 :(得分:2)

这可以使用两个连续的aggregate函数来解决:

agg <- aggregate(val ~ Tracking, data = df, c)
agg$val <- paste(agg$val) # Change list output to character
aggregate(Tracking ~ val, data = agg, c)

中级输出:

agg

  Tracking       val
1        1 36, 1, 20
2        2     36, 7
3        3     36, 7
4        4     36, 7
5        5     18, 7
6        6     18, 7

最终输出:

                 val Tracking
1       c("18", "7")     5, 6
2 c("36", "1", "20")        1
3       c("36", "7")  2, 3, 4

示例数据:

df <- data.frame(val= c(36,36,36,36,18,18,1,7,7,7,7,7,20), 
                 Tracking=c(1,2,3,4,5,6,1,2,3,4,5,6,1))

答案 1 :(得分:1)

希望这有帮助!

library(dplyr)

df %>%
  group_by(Tracking) %>%
  summarise(val_combined = paste(val, collapse=",")) %>%
  group_by(val_combined) %>%
  summarise(Tracking_combined = paste(Tracking, collapse=","))

输出为:

  val_combined Tracking_combined        
1 18,7         5,6              
2 36,1,20      1                
3 36,7         2,3,4

示例数据:

df <- structure(list(val = c(36L, 36L, 36L, 36L, 18L, 18L, 1L, 7L, 
7L, 7L, 7L, 7L, 20L), Tracking = c(1L, 2L, 3L, 4L, 5L, 6L, 1L, 
2L, 3L, 4L, 5L, 6L, 1L)), .Names = c("val", "Tracking"), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13"
))

答案 2 :(得分:0)

假设您有一个名为Table1和Table2的表。并且它们具有类似于表1的外键实现,并且主键是Table2的主键(PKID)的Foriegn键。 这是查询

SELECT PKID FROM TABLE2具有COUNT(PKID)&gt; 1 GROUP BY PKID;