1

我的数据文件(obs)看起来大概是这样(仅前六行用于说明)

date        time    station variable 1 variable 2
22/04/2013    05      10394          4          3
22/04/2013    04      10393          3          5
22/04/2013    07      10389          6          6  
22/04/2013    04      20987          8          1
22/04/2013    02      29483          9          3
22/04/2013    03      49893          5          7

对于具有不同站点数量的几个地区,我有不同的站点编号列表。我想设置一个条件,如果站号包含在站列表中,则原始数据文件(obs)中具有该站号的行应保存到变量 test03 而不是站号为的行不包含在列表中。

示例站列表:

10394
10393
10389
29483

对于只有四个站,我是这样做的:

bed <- (obs$station == 10394 | obs$station == 10393 | obs$station == 10389 | obs$station == 29483)

test03 <- obs[bed,]

test03 然后看起来像这样:

date      time  station  variable 1  variable 2
22/04/2013  05    10394           4           3
22/04/2013  04    10393           3           5
22/04/2013  07    10389           6           6
22/04/2013  02    29483           9           3

到目前为止,这一切都很好。但是,如果我不想单独输入每个站点(如果我有超过 100 个站点左右),我该怎么做呢?我用for循环尝试了它,但后来我只保存了test03中的最后一个站而不是所有站。

4

2 回答 2

1

我能想到的两种快速方法:

如果每个站点的数据框中都有一行,那么match很有可能:

df <- data.frame( stations = letters[1:26] , var = runif(26) )
stations <- c("a","b","j")

df[ match( stations , df$stations ) , ]
   stations         var
1         a 0.311261693
2         b 0.002061808
10        j 0.343057454

如果您的数据框中的每个站点都有多个条目,那么使用%in%运算符进行子集化应该可以满足您的要求:

df[ df$stations %in% stations , ]
   stations         var
1         a 0.311261693
2         b 0.002061808
10        j 0.343057454
于 2013-04-22T06:26:16.390 回答
0

用于%in%测试所有列表。例如这样的:

transform(obs,
           bed =  station %in% c(10394,10393,10389,29483))

        date time station variable1 variable2   bed
1 22/04/2013    5   10394         4         3  TRUE
2 22/04/2013    4   10393         3         5  TRUE
3 22/04/2013    7   10389         6         6  TRUE
4 22/04/2013    4   20987         8         1 FALSE
5 22/04/2013    2   29483         9         3  TRUE
6 22/04/2013    3   49893         5         7 FALSE

或更简单地只获得正确的行:

obs[obs$station %in% c(10394,10393,10389,29483),]

       date time station variable1 variable2
1 22/04/2013    5   10394         4         3
2 22/04/2013    4   10393         3         5
3 22/04/2013    7   10389         6         6
5 22/04/2013    2   29483         9         3
于 2013-04-22T06:22:19.310 回答