首页 > 解决方案 > 在不使用应用和子集函数的情况下选择具有特定条件的子数据集

问题描述

我有如下数据集

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

我想在没有applysubset功能的情况下完成这项工作。

我想要的最终数据集是

#    name  age income  
# 1 alicia 40  100
# 2 jessie 28  60  

顺便说一句,有人可以解释一下为什么我NAs的代码 有额外的行df[(df[,c(2:3)]>=0&df[,(2:3)]<=100),] 吗?

标签: rdataframesubset

解决方案


这可能就是你想要的。我们需要逐列评估它。

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

推荐阅读