【问题标题】:Remove rows in a dataframe containing values outside multiple intervals [duplicate]删除数据框中包含多个间隔之外的值的行[重复]
【发布时间】:2016-10-13 09:48:18
【问题描述】:

一直在您的论坛中搜索我的问题的答案,但没有结果,最近我来的是:subset data.frame union multiple intervals!但我不明白这对我有什么帮助。可能是我的英文阅读能力太弱了。

所以,我有一个数据框study_a,其中包含 246 个人,所有这些个人都被赋予了一个特定的代码以保持匿名。代码是 14 列之一,其余是问卷上的答案。一个例子:

"Code"
2
653
2678
3965
7342
4258
5245

我希望在 1-2999、4251-4599 和 7000-7500 区间之外找到这些值,最后删除这些行(即个人),因为它们不应该包含在本研究中。

除了我也试过的链接:

    in.interval.lo(study_a$"code", 1, 2999) #in.interval.lo(x, lo, hi)

但这个功能似乎不适用于多个间隔。此外,当我尝试指定要检查的列值时,我收到一条错误消息(因为除了“代码”之外还有 13 列)。

提前感谢您的帮助,如果这个问题已经得到解决,我将非常感谢您提供指向它的链接,因为我找不到它。

【问题讨论】:

标签: r dataframe find range intervals


【解决方案1】:

你应该看看 R 中使用方括号和逻辑的索引。例如。

study_a[(study_a$Code <= 2999) & (study_a$Code >= 4251),]

编辑:

使用%in%! NOT 运算符来否定重叠:

study_a[ !study_a$code %in% c(1:2999, 4251:4599, 7000:7500), ]

【讨论】:

  • 感谢您的帮助!我使用了上面的函数,结果是;
  • (或0-length row.names),我理解为在给定间隔之外没有值/行?!非常感谢您帮助我!
  • 使用str()class() 检查study_a$Code 是否为数字
  • 将其从因子更改为数字,仍然难以生成与上述相同的结果/消息((或 0-length row.names)。
【解决方案2】:

使用子集函数

xx <- c(1:2999, 4251:4599, 7000:7500)
study_a <- subset(study_a, !code %in% xx )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    • 2017-09-27
    • 2021-10-09
    • 2012-09-05
    • 1970-01-01
    相关资源
    最近更新 更多