子集data.frame为r

时间:2018-02-24 01:02:48

标签: r subset

我有一个data.frame,包含330万行和9列。以下是3个相关列的示例。

StimulusName Subject Pupil  Means
1            1       101    3.270000
2            1       101    3.145000
3            1       101    3.265000
4            2       101    3.015000
5            2       101    3.100000
6            2       101    3.051250
7            1       102    3.035000
8            1       102    3.075000
9            1       102    3.050000
10           2       102    3.056667
11           2       102    3.059167
12           2       102    3.060000
13           1       103    3.085000
14           1       103    3.125000
15           1       103    3.115000

我希望根据刺激名称和主题对数据进行子集化,然后获取该子集的前几行或最后几行。因此,例如,通过获取df$StimulusName == 2 & df$Subject == 102的前两行返回第10行和第11行。

实际数据框包含每个刺激和主题的数千个观察结果。我想用它来分别绘制刺激的第一次和最后200次观察。

2 个答案:

答案 0 :(得分:0)

也许你想要这样的东西:

subCond <- function(x, r, c) {
  m <- x[x[, 1] == r & x[, 2] == c,]
  return(m)
}

收益率,例如:

> subCond(df, 1, 102)
  StimulusName Subject PupilMeans
7            1     102      3.035
8            1     102      3.075
9            1     102      3.050

> subCond(df, 2, 101)
  StimulusName Subject PupilMeans
4            2     101    3.01500
5            2     101    3.10000
6            2     101    3.05125

答案 1 :(得分:0)

没有对此进行测试,但应该有效。

前200

df_filtered <- subset(df, StimulusName == 2 & Subject == 102) df_filtered <- df_filtered[1:200,]

然后绘制df_filtered

最近200

df_filtered <- subset(df, StimulusName == 2 & Subject == 102) df_filtered <- df_filtered[(nrow(df_filtered)-199):nrow(df_filtered),]

然后绘制df_filtered