我正在处理一个数据集,如果值不丢失,我需要R跳过它。我尝试过创建一个for循环,但是R忽略了我的逻辑。我见过其他for循环帖子,但它们不涉及被忽略的条件。
这是一个示例数据集:
library(dplyr)
my_problem <- tibble(name = c("Joe", "Joseph", "Joey"),
score1 = c(2, 7, 12),
score2 = c(NA, 5, 10))
这就是我想要的样子:
solution <- tibble(name = c("Joe", "Joseph", "Joey"),
score1 = c(1, 7, 12),
score2 = c(NA, 5, 10),
score2edit = c(.30103, 5, 10))
这是我的for循环,如果score2列为NA,则对score1进行log10()转换。但是,由于某种原因,代码会忽略我的if语句,而直接跳转到else。
for(i in 1:nrow(my_problem)) {
if(is.na(my_problem$score2[i])) {
my_problem$score2edit <- log10(my_problem$score1)
} else {
my_problem$score2edit <- my_problem$score2
}
}
谢谢!如果您还可以解释为什么此循环不起作用,那将非常有帮助。
答案 0 :(得分:3)
我们可以使用向量化选项(C398C2B4C399C284C398C2A7C398C2A4
)
ifelse/if_else/case_when
library(dplyr)
my_problem %>%
mutate(score2edit = case_when(is.na(score2) ~ log10(score1), TRUE ~ score2))
# A tibble: 3 x 4
# name score1 score2 score2edit
# <chr> <dbl> <dbl> <dbl>
#1 Joe 2 NA 0.301
#2 Joseph 7 5 5
#3 Joey 12 10 10
循环遍历每一行,因此,如果使用它,然后对整个数据集进行赋值/替换,则会在每一行中替换整列