在R中,如何选择已分组的数据框?

时间:2014-11-01 23:46:41

标签: r

我有一个名为alldataless的数据框,由脚本生成。

> dim(alldataless)
[1] 180  68

> str(alldataless)
Classes ‘grouped_df’, ‘tbl_df’, ‘tbl’ and 'data.frame': 180 obs. of  68 variables:
$ subject                   : int  1 1 1 1 1 1 2 2 2 2 ...
$ activityLabel             : Factor w/ 6 levels "LAYING","SITTING",..: 1 2 3 4 5 6

我希望能够运行以下命令,但是我收到错误:

  

alldataless [2]

Error: index out of bounds

我认为这与数据框中使用的分组有关,但我仍然无法弄清楚我需要运行什么命令。

此外,更明确的选择也无济于事。这里它返回有关数据框中每一列的信息:

> alldataless[alldataless$activityLabel]
Source: local data frame [180 x 180]
Groups: subject

   subject      activityLabel tBody_Acc_Mean_X tBody_Acc_Mean_Y tBody_Acc_Mean_Z
1        1             LAYING        0.2215982     -0.040513953       -0.1132036
2        1            SITTING        0.2612376     -0.001308288       -0.1045442
3        1           STANDING        0.2789176     -0.016137590       -0.1106018
4        1            WALKING        0.2773308     -0.017383819       -0.1111481
5        1 WALKING_DOWNSTAIRS        0.2891883     -0.009918505       -0.1075662
6        1   WALKING_UPSTAIRS        0.2554617     -0.023953149       -0.0973020
7        2             LAYING        0.2813734     -0.018158740       -0.1072456
8        2            SITTING        0.2770874     -0.015687994       -0.1092183
9        2           STANDING        0.2779115     -0.018420827       -0.1059085
10       2            WALKING        0.2764266     -0.018594920       -0.1055004
..     ...                ...              ...              ...              ...
Variables not shown: tBody_Acc_Std_X (dbl), subject (int), activityLabel (fctr),

我的最终目标是能够毫无错误地删除此列和其他列:

  

alldataless [, - c(alldataless $ activityLabel)]

Error: index out of bounds

3 个答案:

答案 0 :(得分:3)

这似乎是由' dplyr'中的功能创建的对象。包。例如,Indexing grouped_df object中的问题有类似错误的报告,但其他人(包括我)无法复制。来自@CephBirk的答案并没有多大意义,因为您发布的材料表明它已经有了一个' data.frame'类。我认为这可能是一个仅限于dplyr和R的一个或多个平台或版本的错误。您需要发布一个可重现的示例,例如引用的示例。它似乎不存在于0.2.0版本中,但也许更高版本的dplyr引入了一个bug。试试引用的例子:

# With version 2.0
x <- mtcars %>% group_by(am, gear) %>% 
               summarise_each(funs(sum), disp, hp, drat)
class(x)

> x[,2]
[1] 3 4 4 5

答案 1 :(得分:1)

如果您先将其转换为data.frame,那么它将起作用:

as.data.frame(alldataless)[,2]

或者按照建议:

as.data.frame(alldataless)[,'activityLabel']

答案 2 :(得分:1)

当我使用tidyverse包时,会发生这种情况,尝试

ungroup(alldataless)

适合我。