将行值计数转换为R中的列

时间:2016-03-14 19:29:52

标签: r

假设我有一个如下数据框,

Name   value
A        0
A        1
A        2
A        3
B        0
B        0
B        3
C        5

我想要以下输出,

Name     0     0<X<2     2-4     5 and above
A        1       1        2       0
B        2       0        1       0
C        0       0        0       1 

我希望创建新列并将行数计入其中。我试过重塑它。但它正在改变结构,但计数不起作用。有人可以帮我这么做吗?

由于

3 个答案:

答案 0 :(得分:1)

您可以在class中创建dataframe列,然后使用table()

df <- read.table(text="Name   value
A        0
A        1
A        2
A        3
B        0
B        0
B        3
C        5", header=T)

df[df$value==0, 'class'] <- "0"
df[df$value==1, 'class'] <- "0<X<2"
df[df$value>=2&df$value<=4, 'class'] <- "2-4"
df[df$value>4, 'class'] <- "5 and above"
table(df$Name, df$class)


    0 0<X<2 2-4 5 and above
  A 1     1   2           0
  B 2     0   1           0
  C 0     0   0           1

答案 1 :(得分:1)

我们可以使用cut

library(data.table)
setDT(df1)[, gr := cut(value, breaks=c(-1, 0, 2, 4, Inf), 
         labels=c(0, '0<X<2', '2-4', '5 and above'))]
dcast(df1, Name~gr)
#     Name 0 0<X<2 2-4 5 and above
#1:    A 1   2   1           0
#2:    B 2   0   1           0
#3:    C 0   0   0           1

答案 2 :(得分:1)

只是为了好玩:

f <- function(x) c(sum(x == 0), sum(x > 0 & x < 2), sum(x >= 2  & x <= 4), sum(x > 5))

t(sapply(split(df$value, df$Name), f))
  [,1] [,2] [,3] [,4]
A    1    1    2    0
B    2    0    1    0
C    0    0    0    0