R-如何按年计算一列中的非零值?

时间:2015-07-30 01:53:18

标签: r count

我的表格有四列,'年',' doy',' rain'' crain'。专栏年份'范围从1957年至2007年和专栏'范围从1-365(或366)。

我想知道的是:

对于每年(1957-2007),列中有多少行具有非零值' rain&#39 ;?

例如,在1957年,我想知道列中有多少行具有非零值' rain'?

任何帮助将不胜感激!谢谢。

格洛丽亚

1 个答案:

答案 0 :(得分:1)

这是一个可重复的例子。请在将来尝试提出这样的问题。

data <- data.frame(sample(1957:2007, 1000, T), 
                   sample(1:365, 1000, T), 
                   round(rnorm(1000, 0, 10)))
names(data) <- c('year', 'day', 'rain')

# there are many ways to do this 
# credit to thelatemail - This uses ?aggregate
aggregate(rain ~ year, data=data, FUN=function(x) sum(x != 0))

# This approach uses split and sapply functions
sapply(split(data$rain, data$year), function(x) sum(x != 0))

# Using data.table package
library(data.table)
setDT(data)[, list(rain=sum(rain != 0)), by=year]