当我尝试在 for 循环 - R 中进行子集化时,为什么我的代码返回所有记录?
Why is my code returning all records when I am trying to subset inside for loop - R?
for (i in 1:length(data$name)){
if (!is.na(data$years[i]) >= 34 & !is.na(data$gender[i]) == "男" & !is.na(data$classification[i]) == "mid"){
打印(数据$名称)
}
}
也许你可以像下面那样尝试 subset
+ complete.cases
subset(
data,
years >= 34 & gender == "male" & classification == "mid" & complete.cases(data[c("years", "gender", "classification")])
)$name
您的代码中存在一些问题。我假设这是一个 class 练习或类似练习,所以我将添加一些额外的细节来说明您错过了一个步骤。
首先你的循环工作正常,但是你的 if 条件不完全正确。
!is.na(data$years[i]) >= 34
你的所有情况看起来(有点)像这样。这个想法很明显,你想“检查 data$years[i]
不为 null,并且大于 34”。但是在 R(和大多数语言)中,你必须单独检查这些。
!is.na(data$years[i]) && data$years[i] >= 34
与您的其他情况类似。
接下来您的打印语句将打印出所有内容,因为这是您要求它执行的操作:
print(data$name)
对您到目前为止所做的任何事情都“一无所知”。好像是要打印具体的记录,eg:
print(data$name[i])
这就是解决问题的方法。
现在 R 有一个叫做“矢量化”的东西,所以我们可以一次完成整个循环:
data$name[!is.na(data$years) & !is.na(data$gender) & !is.na(data$classification) & data$year > 34 & data$gender == "male" & data$classification == "mid"]
但我假设这不是您当前练习的一部分。请注意,对于向量化(例如,超过 1 个)条件,我使用单个 &
,但对于单个条件,我使用 2 &&
的细微(但重要)差异。后者针对单个输入进行了优化以“惰性”(因此速度更快)。
for (i in 1:length(data$name)){
if (!is.na(data$years[i]) >= 34 & !is.na(data$gender[i]) == "男" & !is.na(data$classification[i]) == "mid"){ 打印(数据$名称) } }
也许你可以像下面那样尝试 subset
+ complete.cases
subset(
data,
years >= 34 & gender == "male" & classification == "mid" & complete.cases(data[c("years", "gender", "classification")])
)$name
您的代码中存在一些问题。我假设这是一个 class 练习或类似练习,所以我将添加一些额外的细节来说明您错过了一个步骤。
首先你的循环工作正常,但是你的 if 条件不完全正确。
!is.na(data$years[i]) >= 34
你的所有情况看起来(有点)像这样。这个想法很明显,你想“检查 data$years[i]
不为 null,并且大于 34”。但是在 R(和大多数语言)中,你必须单独检查这些。
!is.na(data$years[i]) && data$years[i] >= 34
与您的其他情况类似。
接下来您的打印语句将打印出所有内容,因为这是您要求它执行的操作:
print(data$name)
对您到目前为止所做的任何事情都“一无所知”。好像是要打印具体的记录,eg:
print(data$name[i])
这就是解决问题的方法。
现在 R 有一个叫做“矢量化”的东西,所以我们可以一次完成整个循环:
data$name[!is.na(data$years) & !is.na(data$gender) & !is.na(data$classification) & data$year > 34 & data$gender == "male" & data$classification == "mid"]
但我假设这不是您当前练习的一部分。请注意,对于向量化(例如,超过 1 个)条件,我使用单个 &
,但对于单个条件,我使用 2 &&
的细微(但重要)差异。后者针对单个输入进行了优化以“惰性”(因此速度更快)。