R 唯一计数

R 唯一计数,r,plyr,R,Plyr,我有一个数据框 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_

我有一个数据框

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\u D
    只有一个地址,而且在战争中
    O
我想要的是格式为刚计数的输出

我需要有一个格式,我可以得到

names    A  B  C   O    
Stacy_A  2  0  0   0    
Stacy_B  0  2  0   0  
Stacy_C  0  0  2   0  
Stacy_D  0  0  0   1 

正如OP提到的将“Name”作为一个单独的列,我们可以使用
restrape2
中的
dcast
。我们将“长”格式转换为“宽”格式,并指定
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所提到的,
dplyr
中的
count
可以与
spread

 count(df, Name, War) %>%
           spread(War, n, fill = 0) 

正如OP提到的将“Name”作为一个单独的列,我们可以使用
restrape2
中的
dcast
。我们将“长”格式转换为“宽”格式,并指定
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所提到的,
dplyr
中的
count
可以与
spread

 count(df, Name, War) %>%
           spread(War, n, fill = 0) 

表格(mydf[c(1,3)])
?“地址”列与这个问题有什么关系?
表(mydf[c(1,3)])
?“地址”列与此问题有什么关系?或者
count(test,Name,War)%%>%spread(War,n,fill=0)
谢谢docendo,但我在新版本的中找不到spreadr@AshishPatodia您是否安装了
tidyr
?或
count(测试、名称、战争)%%>%排列(战争、n、填充=0)
谢谢docendo,但我在新版的中找不到spreadr@AshishPatodia您三天安装了
tidyr