在R中提取具有特定条件的行

时间:2014-03-06 21:22:44

标签: r dataframe row extract

我有一个数据框,其中包含名为“row”,“col”和“time”的列。 行的值为A到H,Col的值为1到12.时间值为“5,10,15,20,25,30。”

所以我想制作包含相同行数和行数的不同数据帧或矢量集。 col但不同的时间。因此,最终会有96个不同的数据框架或矢量集合具有匹配的行和列,但时间和活动的值不同。

以下是我的数据集示例。

     row col time activity day
1     A   1    5       33   1
2     B   1    5       36   1
3     C   1    5       53   1
4     D   1    5       40   1
5     E   1    5       91   1
6     F   1    5       80   1
7     G   1    5       89   1
8     H   1    5       82   1
97    A   1   10       38   1
98    B   1   10       92   1  
99    C   1   10       47   1
100   D   1   10       57   1
101   E   1   10       84   1
102   F   1   10       85   1
103   G   1   10       96   1

以下是我想要的样本......

     row col time activity day
1     A   1    5       33   1
2     A   1   10       38   1
3     A   1   15       66   1

等等

谢谢〜

1 个答案:

答案 0 :(得分:2)

如果我理解正确,您希望将数据帧拆分为子数据帧,其中每个子数据帧具有相同的rowsCol值。您可以使用split

执行此操作
df.split <- with(df, split(df, list(rows, Col)))
head(df.split, 3) # showing 3 of 96 sub data frames

制作

$A.1
    rows Col time activity
1      A   1    5       26
97     A   1   10       91
193    A   1   15       25
289    A   1   20        2
385    A   1   25       95
481    A   1   30       35

$B.1
    rows Col time activity
2      B   1    5       64
98     B   1   10       71
194    B   1   15       72
290    B   1   20       45
386    B   1   25       52
482    B   1   30       43

$C.1
    rows Col time activity
3      C   1    5       49
99     C   1   10       27
195    C   1   15       35
291    C   1   20       16
387    C   1   25        9
483    C   1   30       94

以下是我使用的玩具数据:

rows <- LETTERS[1:8]
Col <- 1:12
time <- (1:6) * 5  
df <- expand.grid(rows=rows, Col=Col, time=time)
df$activity <- sample(1:100, nrow(df), rep=T)