计算-99.9 in r

时间:2012-04-24 21:03:39

标签: r

我是使用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个文件有同样的问题(我知道我需要循环它)但如果我知道如何为一个文件做,那么我将只创建一个循环。

我非常感谢任何帮助。非常感谢您提前阅读和帮助!!!

2 个答案:

答案 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