R For 循环与 if 语句应用格式
R For loop with if statement to Apply format
假设我有一个看起来像这样的 for 循环。
person <- c("Mike", "Kim", "Fred", "Steve", "Quail", "bean")
sleep <- c(5, 10, 3, 7, 1, 5)
dat <- data.frame(person, sleep)
for (i in 1:length(dat$person)) {
if (dat$sleep[i] >= 7) {
dat$fatigue[i] <- 0
}
if (dat$sleep[i] > 5 & dat$sleep[i] < 7) {
dat$fatigue[i] <- 1
}
if (dat$sleep[i] >= 3 & dat$sleep[i] <= 5) {
dat$fatigue[i] <- 2
}
if (dat$sleep[i] < 3) {
dat$fatigue[i] <- 3
}
}
如何使用 R 的应用功能用 if 语句编写这个 for 循环?
我对使用它还比较陌生,如有任何帮助,我们将不胜感激。
如果您有任何问题,请告诉我。
谢谢。
我们可以尝试使用 dplyr
库中的 case_when
dat$fatigue <- case_when(
dat$sleep < 3 ~ 3,
dat$sleep >= 3 & dat$sleep <= 5 ~ 2,
dat$sleep > 5 & dat$sleep < 7 ~ 1,
dat$sleep >= 7 ~ 0,
TRUE ~ -1
)
请注意,与 R 中的许多函数一样,case_when()
已经矢量化。因此,您不需要使用显式 for
循环。
如果你想使用嵌套的 ifelse,这个解决方案对使用 baseR 很有用
person <- c("Mike", "Kim", "Fred", "Steve", "Quail", "bean")
sleep <- c(5, 10, 3, 7, 1, 5)
dat <- data.frame(person, sleep)
dat$fatigue <- ifelse(dat$sleep < 3,3,ifelse(dat$sleep >= 3 & dat$sleep <= 5, 2,ifelse(dat$sleep > 5 & dat$sleep < 7,1,ifelse(dat$sleep >= 7, 0,"NA"))))
)
假设我有一个看起来像这样的 for 循环。
person <- c("Mike", "Kim", "Fred", "Steve", "Quail", "bean")
sleep <- c(5, 10, 3, 7, 1, 5)
dat <- data.frame(person, sleep)
for (i in 1:length(dat$person)) {
if (dat$sleep[i] >= 7) {
dat$fatigue[i] <- 0
}
if (dat$sleep[i] > 5 & dat$sleep[i] < 7) {
dat$fatigue[i] <- 1
}
if (dat$sleep[i] >= 3 & dat$sleep[i] <= 5) {
dat$fatigue[i] <- 2
}
if (dat$sleep[i] < 3) {
dat$fatigue[i] <- 3
}
}
如何使用 R 的应用功能用 if 语句编写这个 for 循环?
我对使用它还比较陌生,如有任何帮助,我们将不胜感激。
如果您有任何问题,请告诉我。
谢谢。
我们可以尝试使用 dplyr
库中的 case_when
dat$fatigue <- case_when(
dat$sleep < 3 ~ 3,
dat$sleep >= 3 & dat$sleep <= 5 ~ 2,
dat$sleep > 5 & dat$sleep < 7 ~ 1,
dat$sleep >= 7 ~ 0,
TRUE ~ -1
)
请注意,与 R 中的许多函数一样,case_when()
已经矢量化。因此,您不需要使用显式 for
循环。
如果你想使用嵌套的 ifelse,这个解决方案对使用 baseR 很有用
person <- c("Mike", "Kim", "Fred", "Steve", "Quail", "bean")
sleep <- c(5, 10, 3, 7, 1, 5)
dat <- data.frame(person, sleep)
dat$fatigue <- ifelse(dat$sleep < 3,3,ifelse(dat$sleep >= 3 & dat$sleep <= 5, 2,ifelse(dat$sleep > 5 & dat$sleep < 7,1,ifelse(dat$sleep >= 7, 0,"NA"))))
)