我有两个数据集应该是相同的大小但不是 . 我需要修剪A中不在B中的值,反之亦然,以消除进入报告的图形中的噪声 . (别担心,这些数据没有被永久删除!)
我看过以下内容:
-
Selecting columns in R data frame based on those not in a vector
-
How to combine multiple conditions to subset a data-frame using "OR"?
但是我仍然无法使其正常工作 . 这是我的代码:
bg2011missingFromBeg <- setdiff(x=eg2011$ID, y=bg2011$ID)
#attempt 1
eg2011cleaned <- subset(eg2011, ID != bg2011missingFromBeg)
#attempt 2
eg2011cleaned <- eg2011[!eg2011$ID %in% bg2011missingFromBeg]
第一次尝试只是消除了生成的setdiff向量中的第一个值 . 第二次尝试产生并且笨拙的错误:
Error in `[.data.frame`(eg2012, !eg2012$ID %in% bg2012missingFromBeg)
: undefined columns selected
4 回答
根据对原始帖子的评论,合并/连接非常适合此问题 . 特别是,内部联接将仅返回两个数据框中存在的值,从而不需要
setdiff
语句 .使用Dinre的例子中的数据:
In base R:
Using the dplyr package:
要将数据保存为两个单独的表,每个表只包含自己的变量,这会将不需要的表子集设置为仅在其加入之前的索引变量 . 然后,没有新的变量添加到结果表中 .
这会给你你想要的:
你第二次尝试的错误是因为你忘记了
,
通常,为方便起见,规范
object[index]
subsets列为2dobject
. 如果要对行进行子集并保留所有列,则必须使用规范object[index_rows, index_columns]
,而index_cols
可以留空,默认情况下将使用所有列 .但是,您仍需要包含
,
以指示您要获取行的子集而不是列的子集 .如果您真的只想通过两个数据帧中存在的索引对每个数据帧进行子集化,则可以使用“匹配”功能执行此操作,如下所示:
但是,这与:
这是一个演示:
实际 human comprehensible 示例(因为这是我第一次使用%in%),如何比较两个数据帧并仅保留特定列中包含相等值的行:
结果: