尝试对here提出的问题进行回答,但无法查看我出错的地方。
我试图使用公共字段从另一个数据帧中列出的一个数据帧观察中提取。引用的问题并不完全相同,但建议使用" setdiff"对于相关问题,这似乎符合我的需要。
以下是我设置的示例:
# orginal dataframe
origdf <- data.frame(apple = c(111, 2, 4, "fox"),
orange=c( 222, 11, 12, 14),
pear=c( "one", "two", 10, 11),
peach=c("which", "way", "to", "go"),
banana=c(333, 22, 23, 24),
grape=c(77, 78, 79, 80))
origdf
# a separate process produces a dataframe with observations to be extracted from the original dataframe
extract <- origdf[which(origdf$apple == 111 |
origdf$apple == "fox"), ]
extract
test <- origdf[setdiff(origdf$apple, extract$apple)]
test
# the above returns an error that "undefined columns selected", but the following works...
origdf$apple
extract$apple
为什么我遇到这个问题?
答案 0 :(得分:1)
如评论中所述,您收到错误是因为您错过了逗号:
test <- origdf[setdiff(origdf$apple, extract$apple)]
没有它,R认为你是列的子集。因此选择&#34;未定义的列&#34; 。
您的第二个问题是使用setdiff
进行索引。在对data.frame的行进行子集化时,您需要提供索引或逻辑向量,以指示特定行是否应包含在最终子集中。但是,以下是
setdiff(origdf$apple, extract$apple)
返回:
[1] "2" "4"
调用时会隐式强制c(2, 4)
:
test <- origdf[setdiff(origdf$apple, extract$apple),]
因为R认为你是按索引进行子集化。因此返回:
apple orange pear peach banana grape
2 2 11 two way 22 78
4 fox 14 11 go 24 80
要返回您真正想要的内容,您可以使用%in%
返回origdf$apple
setdiff
中是否test <- origdf[origdf$apple %in% setdiff(origdf$apple, extract$apple),]
是的逻辑向量:
apple orange pear peach banana grape
2 2 11 two way 22 78
3 4 12 10 to 23 79
返回:
origd$apple
另一种方法是检查%in%
是extract$apple
!
并返回不是(test <- origdf[!origdf$apple %in% extract$apple,]
)的行:
from ParentClass import ParentClass