以下数据框:
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
.....
数据帧有什么问题?
答案 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)