【发布时间】:2015-08-22 07:10:57
【问题描述】:
作为更大、更复杂代码体的一部分,我遇到了 dplyr / 本地数据帧挑战。正如下面的简化示例所示,代码包括在基本 R 中工作的基本类型的子集:
#creation of data frame
dat=data.frame(group=c(rep(c("a","b","c","d"),2)),value=(seq(1,8,1)))
othergroup=dat[dat[,"group"]==dat[2,"group"],]
othergroup
这给出了想要的答案:
group value
2 b 2
6 b 6
#loading dplyr
require(dplyr)
othergroup=dat[dat[,"group"]==dat[2,"group"],]
othergroup #still works
加载 dplyr 后,一切仍然有效。但是,在我运行 dplyr 操作后,会创建一个不再允许类似子集的本地数据框。
#pro-forma dplyr operation
dat = dat %>%
group_by(group)
othergroup=dat[dat[,"group"]==dat[2,"group"],] #error message
Error in Ops.data.frame(dat[, "group"], dat[2, "group"]) :
‘==’ only defined for equally-sized data frames
我知道可以在 dplyr 中使用 select 函数,但我想重用一些现有代码。有没有办法将 dplyr 生成的“本地数据帧”强制转换回常规数据帧?
【问题讨论】: