首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用R根据另一列的条件更新一列(使用NAs)

使用R根据另一列的条件更新一列(使用NAs)
EN

Stack Overflow用户
提问于 2022-01-19 01:25:39
回答 1查看 75关注 0票数 0

给定一个小的数据集如下:

代码语言:javascript
复制
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:

代码语言:javascript
复制
     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,而忽略了它的原始值。

预期结果:

代码语言:javascript
复制
     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

代码语言:javascript
复制
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)))

结果:

代码语言:javascript
复制
     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_directionNAs,direction_acc也变成NAs时,我们如何才能正确地实现这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-19 01:33:20

基R

代码语言:javascript
复制
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

德普利

代码语言:javascript
复制
library(dplyr)
df %>%
  mutate(
    direction_acc = if_else(act_direction == "unchanged", "true", direction_acc)
  )

如果我像您一样添加NAs (我将使用across作为mutate_if被取消推荐),那么我们可以将==更改为%in%,以达到预期的效果。

代码语言:javascript
复制
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          true
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70764312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档