我是使用R的新手,我有一个问题,我正试图找到答案。我有一个文件组织如下(它有数千行,但我只是为了简单起见示例):
YEAR Month day S1 T1 T2 R1
1965 3 2 11.7 20.6 11.1 18.8
1965 3 3 14.0 16.7 3.3 0.0
1965 3 4 -99.9 -99.9 -99.9 -99.9
1965 3 5 9.2 5.6 0.0 -99.9
1965 3 6 10.1 6.7 0.0 -99.9
1965 3 7 9.7 7.2 1.1 0.0
我想知道每个列(T1,T2和R1)-99.9所在的年,月和日;例如从1980/1/3到1980/1/27,T1为X -99.9,从1990/2/10到1990/3/30,T1为Y-99.9 ......依此类推。对于T2和R也是如此 怎么能在R?
这只是一个这样的文件,但我有近2000个文件有同样的问题(我知道我需要循环它)但如果我知道如何为一个文件做,那么我将只创建一个循环。
我非常感谢任何帮助。非常感谢您提前阅读和帮助!!!
答案 0 :(得分:0)
我冒昧地重命名你的最后一个数据帧列“R1”
lapply(c('T1', 'T2', 'R1'), function(x) { dfrm[ dfrm[[x]]==-99.9 , # rows to select
1:3 ] }# columns to return
)
#-------------
[[1]]
YEAR Month day
3 1965 3 4
[[2]]
YEAR Month day
3 1965 3 4
[[3]]
YEAR Month day
3 1965 3 4
4 1965 3 5
5 1965 3 6
目前尚不清楚您是否需要值或计数(我认为您不能在同一报告中同时使用这两者。)如果您想为条目命名:
> misdates <- .Last.value
> names(misdates) <- c('T1', 'T2', 'R1')
如果你想要一个计数:
lapply(misdates, NROW)
$T1
[1] 1
$T2
[1] 1
$R1
[1] 3
(您可能想了解如何使用NA值。建议不要使用数字作为缺失值。)
答案 1 :(得分:0)
如果我理解正确,您希望获得每月获得的“-99.9”的数量和列数,
这是我使用plyr
的S1代码。您会注意到我扩展了您的示例以获得一个月的数据。
library(plyr)
my.table <-read.table(text="YEAR Month day S1 T1 T2 R1
1965 3 2 11.7 20.6 11.1 18.8
1965 3 3 14.0 16.7 3.3 0.0
1965 3 4 -99.9 -99.9 -99.9 -99.9
1965 3 5 9.2 5.6 0.0 -99.9
1965 3 6 10.1 6.7 0.0 -99.9
1965 3 7 9.7 7.2 1.1 0.0
1966 1 7 -99.9 7.2 1.1 0.0
1966 1 8 -99.9 7.2 1.1 0.0
", header=TRUE, as.is=TRUE,sep = " ")
#Create a year/month column to summarise per month
my.table$yearmonth <-paste(my.table$YEAR,"/",my.table$Month,sep="")
S1 <-count(my.table[my.table$S1==-99.9,],"yearmonth")
S1
yearmonth freq
1 1965/3 1
2 1966/1 2