R 对于具有不同因子值的行(另一列),如何计算不同整数值(在特定列中)的出现次数?

R 对于具有不同因子值的行(另一列),如何计算不同整数值(在特定列中)的出现次数?,r,dataframe,R,Dataframe,我有一个数据框,看起来像这样: My_Data = data.frame(name = rep(LETTERS[1:10],3), number = sample(0:3,30, replace=TRUE) name number 1 A 3 2 B 3 3 C 0 4 D 3 5 E 2 6 F 2 7 G 2 8 H 2 9 I

我有一个数据框,看起来像这样:

My_Data = data.frame(name = rep(LETTERS[1:10],3), number = sample(0:3,30, replace=TRUE)

    name number
1     A      3
2     B      3
3     C      0
4     D      3
5     E      2
6     F      2
7     G      2
8     H      2
9     I      1
10    J      3
11    A      1
12    B      2
13    C      0
14    D      1
15    E      3
16    F      0
17    G      2
18    H      2
19    I      2
20    J      2
21    A      0
22    B      1
23    C      3
24    D      0
25    E      2
26    F      0
27    G      1
28    H      1
29    I      3
30    J      0
现在,我想得到一个数据框,它有数字列中每个可能值的列,以及每个数字值相对于名称列中每个值的出现次数

    name number_0  number_1   number_2  number_3
1     A      1         1        0         1
2     B      0         1        1         1
3     C      2         0        0         1
4     D      1         1        0         1
5     E      0         0        2         1
6     F      2         0        1         0
7     G      0         1        2         0
8     H      0         1        2         0
9     I      0         1        1         1  
10    J      1         0        1         1
我该怎么做? 谢谢


编辑:我不想转换成宽格式。我正在寻找一种方法来计算每个可能值的发生次数。

我们可以获得
计数
,然后将
扩展为“宽”格式

library(dplyr)
library(tidyr)
My_Data %>% 
     count(name, number) %>% 
     mutate(number = paste('number', number, sep='_')) %>% 
     spread(number, n, fill = 0)
# A tibble: 10 x 5
#    name number_0 number_1 number_2 number_3
# * <chr>    <dbl>    <dbl>    <dbl>    <dbl>
# 1     A        1        1        0        1
# 2     B        0        1        1        1
# 3     C        2        0        0        1
# 4     D        1        1        0        1
# 5     E        0        0        2        1
# 6     F        2        0        1        0
# 7     G        0        1        2        0
# 8     H        0        1        2        0
# 9     I        0        1        1        1
#10     J        1        0        1        1
库(dplyr)
图书馆(tidyr)
我的_数据%>%
计数(名称、数字)%%>%
变异(数字=粘贴('number',数字,sep='')%>%
排列(编号,n,填充=0)
#一个tibble:10x5
#姓名号码\u 0号码\u 1号码\u 2号码\u 3
# *                 
#1A 110 1
#2B01111
#3C2001
#4D101
#5E0021
#6F20110
#7 G 0 1 2 0
#8h0120
#9我0 1 1 1
#10 J 10 1 1 1

您还可以使用
xtabs()
函数

xtabs(~My_Data$name + My_Data$number)
还可以尝试:

table(My_Data)
或者,如果需要
数据帧

as.data.frame.matrix(table(My_Data))

as.data.frame.matrix(xtabs(~My_data$name+My_data$number))
@Adela是的,如果您想将其作为data.frame或矩阵进行操作。可能的副本不是真的。我这里的问题是计算每个值的出现次数,而不是将其从长格式转换为宽格式,但R18对您问题的回答在结构上与在重塑为“宽”期间对问题的回答相同。您可以对数据执行一些操作(例如,求和或计数)。顺便说一句:要使数据可复制,请使用
set.seed()