对于示例数据框:
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。
任何帮助都将不胜感激。
答案 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