为什么不能通过某些键子集数据帧?

时间:2018-11-19 09:54:52

标签: r

以下数据框:

df <- data.frame(yr = rep(2000:2017,each=46),
                 dayorder = rep(seq(1,365,8),time=18),
                 fid = rep(1:46,time=18),
                 Value = runif(46*18)
                 )

当我通过按键筛分时:

df[which(dayorder==9),]
      yr dayorder fid      Value
2   2000        9   2 0.3424053
48  2001        9   2 0.6639720
94  2002        9   2 0.5530076
140 2003        9   2 0.9757845
.....

使用'yr'键时,报告错误:

df[which(yr==2001),]
Error in which(yr == 2001) : object 'yr' not found

“ fid”键出现相同的错误”

df[which(fid==2),]
Error in which(fid == 2) : object 'fid' not found

但是df $ yr存在:

df$yr
  [1] 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000
 .....

数据帧有什么问题?

2 个答案:

答案 0 :(得分:2)

您需要在列名之前添加df$,在第一种情况下,您不会收到错误消息,可能是因为dayorder是您的环境中定义的变量。

它应该像其他错误一样引发错误。

df[which(df$dayorder==9),] # or df[df$dayorder==9,] 

当我这样打df[which(df$dayorder==9),]时,我得到:

  

其中(dayorder == 9)的错误:找不到对象'dayorder'

另一种使用with的解决方案可以避免使用过多的df$(还请注意,您可以删除which()

with(df, df[dayorder==9, ])

答案 1 :(得分:0)

您也可以尝试使用tidyverse

library(tidyverse)
filter(df, yr == 2001)