【问题标题】:Subset the remaining of a dataframe using another subset使用另一个子集对数据帧的剩余部分进行子集
【发布时间】:2019-03-20 11:07:41
【问题描述】:

我有一个示例数据集。我使用某些条件创建了原始数据框的子集。现在我需要提取原始样本数据框的剩余内容,创建的子集除外。我该怎么做?

data("mtcars")
fulldf <- mtcars
subdf <- subset.data.frame(fulldf, subset = fulldf$disp < 100)
restdf <- subset.data.frame(fulldf, subset = <fulldf without subdf>)

关于 R 中的子集数据框有很多问题,但我找不到满足我要求的问题。 此外,最终解决方案不一定要使用subset.data.frame。任何方法/包都可以。

【问题讨论】:

  • 有一个很好的方法使用来自dplyrsetdiffdplyr::setdiff(fulldf, subdf)
  • 谢谢马库斯!这成功了!

标签: r dataframe subset


【解决方案1】:

最好将base R中的逻辑条件赋值给一个对象标识符,然后取反(!

i1 <- fulldf$disp < 100
subdf <- subset.data.frame(fulldf, subset = i1)
restdf <- subset.data.frame(fulldf, subset = !i1) 

另一种选择是使用split 创建两个数据集的list

lst1 <- split(fulldf, i1)

如果“subdf”是在多个条件下创建的(虽然不清楚),一种选择是在数据中添加一个序列变量,然后使用%in% 进行子集化

fulldf$ind <- seq_len(nrow(fulldf))

然后在“subdf”步骤之后

restdf <- subset(fulldf, !ind %in% subdf$ind)

并删除“ind”列

restdf$ind <- NULL
subdf$ind <- NULL

【讨论】:

  • 谢谢,这是一个很好的解决方案,但不幸的是,我正在使用多个条件创建 subdf,并且无法将其存储在一个变量中。
  • @snair1591 最终输出不会是逻辑向量吗?
  • 我正在使用rbind 通过多种条件创建我的subd,如果有帮助的话。
  • @snair1591 我添加了另一个base R 方法。也可以通过使用row.names 创建条件来完成,但我认为rbind 和其他方法可能在此过程中更改了行名
  • @snair1591 可以通过包轻松解决,但如果没有其他选择/效率等,我只会使用外部依赖。
猜你喜欢
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-23
  • 1970-01-01
  • 2019-12-18
  • 2020-06-17
  • 1970-01-01
相关资源
最近更新 更多