我在一些监测点有一个包含降水数据的数据集:
structure(list(date = structure(1:10, .Label = c("2010-01-01",
"2010-01-02", "2010-01-03", "2010-01-04", "2010-01-05", "2010-01-06",
"2010-01-07", "2010-01-08", "2011-01-01", "2011-01-02"), class = "factor"),
site1 = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0), site2 = c(0.7, 0,
1.4, 0, 0, 0, 2.2, 0, 0, 2.2), site3 = c(0, 0, 0, 0, 0, 1.3,
0.6, 0, 1.3, 0.6), site4 = c(0L, 0L, 0L, 0L, 0L, 0L, 2L,
0L, 0L, 2L), site5 = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0), site6 = c(0,
0, 0, 0, 0, 0, 0, 0, 0, 0), site7 = c(0, 0, 0, 1, 0, 4, 3,
1, 4, 3), site8 = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)), .Names = c("date",
"site1", "site2", "site3", "site4", "site5", "site6", "site7",
"site8"), class = "data.frame", row.names = c(NA, -10L))
我需要在每个站点找到每年第一次出现任何高于0的值。我不知道该怎么做。结果应该看起来像这样[数据框很好]:
year site1 site2 site3 site4 site5 site6 site7 site8
2001 01-02 01-02 01-02 01-02 01-01 02-02 01-01 01-02
2002 01-03 01-02 02-02 01-02 01-02 01-03 01-02 04-02
2003 01-02 01-05 01-02 01-02 05-02 01-02 01-07 01-02
2004 05-02 01-02 01-02 07-02 01-02 05-02 01-02 01-06
如何在R?
中做到这一点谢谢, 学家
答案 0 :(得分:2)
这个怎么样?
mydata <- read.table(text="date site1 site2 site3 site4 site5 site6 site7 site8
2010-01-01 0.0 0.7 0.0 0 0.0 0.0 0.0 0.0
2010-01-02 0.0 0.0 0.0 0 0.0 0.0 0.0 0.0
2010-01-03 0.0 1.4 0.0 0 0.0 0.0 0.0 0.0
2010-01-04 0.0 0.0 0.0 0 0.0 0.0 1.0 0.0
2010-01-05 0.0 0.0 0.0 0 0.0 0.0 0.0 0.0
2010-01-06 0.0 0.0 1.3 0 0.0 0.0 4.0 0.0
2010-01-07 0.0 2.2 0.6 2 0.0 0.0 3.0 0.0
2010-01-08 0.0 0.0 0.0 0 0.0 0.0 1.0 0.0
2011-01-01 0.0 0.0 1.3 0 0.0 0.0 4.0 0.0
2011-01-02 0.0 2.2 0.6 2 0.0 0.0 3.0 0.0",h=T)
year <- format(as.Date(mydata$date),"%Y")
rownames(mydata) <- mydata[,1]
my.first <- function(x) head(names(x)[x],1)
do.call("rbind",(by(mydata[,-1]>0,year, function(x) apply(x,2,my.first))))
应该输出哪个(假设行按日期排序):
site1 site2 site3 site4 site5 site6 site7 site8
2010 Character,0 "2010-01-01" "2010-01-06" "2010-01-07" Character,0 Character,0 "2010-01-04" Character,0
2011 Character,0 "2011-01-02" "2011-01-01" "2011-01-02" Character,0 Character,0 "2011-01-01" Character,0