在r中计算另一个变量的行数

时间:2015-06-18 11:18:55

标签: r

对于示例数据框:

df1 <- structure(list(id = c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 
4L, 4L, 4L, 4L, 5L), c.1 = c(21L, 22L, 33L, 43L, 12L, 33L, 21L, 
54L, 32L, 45L, 24L, 11L, 5L, 2L, 1L), count = c(15L, 15L, 15L, 
15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L)), .Names = c("id", 
"c.1", "count"), row.names = c(NA, -15L), class = "data.frame")

我希望通过id列计算col.1中的数据点数。例如,在上面的数据框中,我想要一个列,添加“计数”,记录每个ID有多少行数据,即计数列将为ids 1,2和3记录3s,然后为4s记录id为4,id为5。

我一直在尝试使用长度,但我似乎无法使用'by'类型命令来查看id。

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:0)

基础R解决方案:

within(df1, count <- ave(c.1, id, FUN = length))
#   id c.1 count
#1   1  21     3
#2   1  22     3
#3   1  33     3
#4   2  43     3
#5   2  12     3
#6   2  33     3
#7   3  21     3
#8   3  54     3
#9   3  32     3
#10  4  45     5
#11  4  24     5
#12  4  11     5
#13  4   5     5
#14  4   2     5
#15  5   1     1

请注意,执行此操作还有十几种可能性(包括某些软件包的功能)。大数据的数量级更高效。

答案 1 :(得分:0)

这是我的dplyr解决方案

> df1 %>% group_by(id) %>% mutate(count = n())
Source: local data frame [15 x 3]
Groups: id

   id c.1 count
1   1  21     3
2   1  22     3
3   1  33     3
4   2  43     3
5   2  12     3
6   2  33     3
7   3  21     3
8   3  54     3
9   3  32     3
10  4  45     5
11  4  24     5
12  4  11     5
13  4   5     5
14  4   2     5
15  5   1     1

答案 2 :(得分:0)

我建议使用plyr。这里有一些例子如何做到:

require(plyr)
df2<-ddply(df1,.(id),summarize,number=length(count))

这是我的输出:

df2
  id number
1  1      3
2  2      3
3  3      3
4  4      5
5  5      1