r - 在不使用应用和子集函数的情况下选择具有特定条件的子数据集
问题描述
我有如下数据集
df<-data.frame(name=c("alicia","samantha","john","jessie"), age=c(40,-23,30,28), income=c(100, 50, 120,60))
我要做的是选择没有负值且值小于 100 的数据集。我试过了
df[(df[,c(2:3)]>=0&df[,(2:3)]<=100),]
但是我无法删除大于 100 的值,我得到了很多'NA's
,如下所示。
# name age income
# 1 alicia 40 100
# 3 john 30 120
# 4 jessie 28 60
# NA <NA> NA NA
# NA.1 <NA> NA NA
# NA.2 <NA> NA NA
我想在没有apply
和subset
功能的情况下完成这项工作。
我想要的最终数据集是
# name age income
# 1 alicia 40 100
# 2 jessie 28 60
顺便说一句,有人可以解释一下为什么我NAs
的代码 有额外的行df[(df[,c(2:3)]>=0&df[,(2:3)]<=100),]
吗?
解决方案
这可能就是你想要的。我们需要逐列评估它。
df[df$age > 0 & df$age <= 100 & df$income > 0 & df$income <= 100, ]
# name age income
# 1 alicia 40 100
# 4 jessie 28 60
或者,如果这更容易,您也可以这样做。我们rowSums
在这里使用是因为如果每一行都满足您的条件,则总和将为 2。
df[rowSums(df[,c(2:3)] >= 0 & df[,(2:3)] <= 100) == 2L, ]
# name age income
# 1 alicia 40 100
# 4 jessie 28 60
推荐阅读
- c++ - 如何在命名空间内创建一个类?
- r - 通过 grImport2 绘制 svg 在终端中可以正常工作,而不是通过 knitr
- c++11 - 通过值捕获本地指针,其余的在 lambda 中通过引用捕获
- javascript - 为什么我的 jqRouter.renderViewSuccess 事件处理程序被调用了两次?
- excel - 根据单元格值隐藏或取消隐藏工作表
- android - Android recyclerview defauilitemanimator 更改持续时间
- dropbox - 将 Google 照片或 DropBox 中的图像列表导出为 CSV
- reactjs - React Navigation V2 不显示栏,React Native
- python - 无法分配“9”:“Characterweapons.weaponid”必须是“Weapons”实例
- php - Laravel(5.6)最后一条消息的雄辩顺序