给定一个小的数据集如下:
df <- structure(list(date = c("2021-09", "2021-10", "2021-11", "2021-12",
"2021-06", "2021-10"), act_direction = c("decrease", "increase",
NA, NA, "unchanged", "unchanged"), pred_direction = c(NA, "decrease",
NA, NA, "decrease", "increase"), direction_acc = c("true", "-",
"-", "true", "false", "false")), class = "data.frame", row.names = c(NA,
-6L))df:
date act_direction pred_direction direction_acc
1 2021-09 decrease <NA> true
2 2021-10 increase decrease -
3 2021-11 <NA> <NA> -
4 2021-12 <NA> <NA> true
5 2021-06 unchanged decrease false
6 2021-10 unchanged increase false我尝试基于act_direction列更新act_direction,更具体地说,如果是act_direction==unchanged,那么我想要将direction_acc的内容更新为true,而忽略了它的原始值。
预期结果:
date act_direction pred_direction direction_acc
1 2021-09 decrease <NA> true
2 2021-10 increase decrease -
3 2021-11 <NA> <NA> -
4 2021-12 <NA> <NA> true
5 2021-06 unchanged decrease true
6 2021-10 unchanged increase true我使用了下面没有发现错误的代码,但它返回的结果超出了预期,因为direction_acc中的其他值被更改为NA:
df %>%
# mutate_all(na_if, '') %>% # I will replace empty cell '' to NA as example data
mutate(direction_acc = ifelse(act_direction == 'unchanged',
'true',
as.character(direction_acc)))结果:
date act_direction pred_direction direction_acc
1 2021-09 decrease <NA> true
2 2021-10 increase decrease -
3 2021-11 <NA> <NA> <NA>
4 2021-12 <NA> <NA> <NA>
5 2021-06 unchanged decrease true
6 2021-10 unchanged increase true所以,我的问题是,为什么当act_direction与NAs,direction_acc也变成NAs时,我们如何才能正确地实现这一点?
发布于 2022-01-19 01:33:20
基R
df$direction_acc[df$act_direction == "unchanged"] <- "true"
df
# date act_direction pred_direction direction_acc
# 1 2021-09 true
# 2 2021-10 decrease -
# 3 2021-11 -
# 4 2021-12 true
# 5 2021-06 unchanged decrease true
# 6 2021-10 unchanged increase true德普利
library(dplyr)
df %>%
mutate(
direction_acc = if_else(act_direction == "unchanged", "true", direction_acc)
)如果我像您一样添加NAs (我将使用across作为mutate_if被取消推荐),那么我们可以将==更改为%in%,以达到预期的效果。
df %>%
mutate(across(where(is.character), ~ na_if(., ""))) %>%
mutate(
direction_acc = if_else(act_direction %in% "unchanged", "true", direction_acc)
)
# date act_direction pred_direction direction_acc
# 1 2021-09 <NA> <NA> true
# 2 2021-10 <NA> decrease -
# 3 2021-11 <NA> <NA> -
# 4 2021-12 <NA> <NA> true
# 5 2021-06 unchanged decrease true
# 6 2021-10 unchanged increase truehttps://stackoverflow.com/questions/70764312
复制相似问题