唯一计数R ddply

时间:2016-01-17 09:02:15

标签: r plyr

我有一个数据框

$('#textarea').keyup(function () {
    $('#textarea-filter').text($('#textarea').val());
    $('#textarea-filter').profanityFilter({
      customSwears: ['ass']
    });
    $('#textarea').val($('#textarea-filter').text());
});

所以我有四个独特的名字,每个名字都有。

  • Name Address War Stacy_A Stacy_A_1 A Stacy_B Stacy_B_1 B Stacy_C Stacy_C_1 C Stacy_A Stacy_A_2 A Stacy_B Stacy_B_2 B Stacy_C Stacy_C_2 C Stacy_D Stacy_D_2 O 有两个地址,都在战争中Stacy_A
  • A有两个地址,都在战争中Stacy_B
  • B有两个地址,都在战争中Stacy_C
  • c只有一个地址且在战争中Stacy_D

我想要的是具有刚才计数的格式的输出。

我需要有一种我可以获得的格式

O

1 个答案:

答案 0 :(得分:2)

由于OP提到将“名称”作为单独的列,我们可以使用dcast中的reshape2。我们将“long”转换为“wide”格式并指定fun.aggregate,即在此情况下为length

library(reshape2)
dcast(df1, Name~War, value.var="Address", length)
#     Name A B C O
#1 Stacy_A 2 0 0 0
#2 Stacy_B 0 2 0 0
#3 Stacy_C 0 0 2 0
#4 Stacy_D 0 0 0 1

或者使用dplyr/tidyr,我们按“名称”,“战争”列进行分组,获取与tally的唯一组合的频率,然后从“长”获取spread(tidyr) “宽”格式。

library(dplyr)
library(tidyr)
df1 %>%
   group_by(Name, War) %>%
   tally() %>%
   spread(War, n, fill=0)
#    Name     A     B     C     O
#    (chr) (dbl) (dbl) (dbl) (dbl)
#1 Stacy_A     2     0     0     0
#2 Stacy_B     0     2     0     0
#3 Stacy_C     0     0     2     0
#4 Stacy_D     0     0     0     1

或者如@docendo discimus所述,来自count的{​​{1}}可与dplyr

结合使用
spread