如何根据多个条件更改列中的某些值,而在不满足条件时保持其他值不变?

问题描述 投票:0回答:1

我有一个数据集,当它在 R 中更新和分析时,我经常提取该数据集。我试图弄清楚如何在列中的值满足 2 个条件时更改它们,否则保留现有值。数据集是“visitdata”,我正在处理此问题的两列是:od_witnessed(他们是否目睹了服药过量,是/否/未知/拒绝)和 num_witnessed(目睹的服药过量数量)。那些输入数据的人以为他们只需要输入一个大于 1 的数字。

因此,如果 od_witnessed = yes AND num_witnessed = NA,那么我希望 num_witnessed 中的值为 1。如果这两个条件不满足,我希望保留现有数字。

当前数据示例:

od_见证 num_见证者
是的 3
是的 不适用
没有 不适用
是的 不适用

所需输出:

od_见证 num_见证者
是的 3
是的 1
没有 不适用
是的 1

最终,我希望能够对 num_witnessed 列进行求和,以获得目睹的服药过量的总数。

以下是我尝试过的一些事情(我对 R 还比较陌生): *值得注意的是,od_witnessed 列被列为因子数据,有 4 个级别“否”、“是”、“未询问”、“拒绝”,而 num_witnessed 列是数字。

visitdata %>%
mutate(od_witnessed = case_when(od_witnessed = 1 & is.na(num_witnessed) ~ 1))

导致错误:“‘mutate()’中的错误:参数中:num_witnessed = case_when(od_witnessed = 1 & is.na(num_witnessed))) 由‘case_when()’中的错误引起:情况 1 ('1 & is .na(num_witnessed)') 必须是双边公式,而不是逻辑向量

visitdata[which(
visitdata$od_witnessed == "Yes" & visitdata$num_witnessed(is.na)), c(visitdata$num_witnessed == 1)]

尝试应用非功能时出错

if(visitdata$od_witnessed = 'yes'& visitdata$num_witnessed = 'NA') {visitdata$num_witnessed = 1}

错误:“if(visitdata$od_witnessed =”中出现意外的“=”

ifelse(visitdata$od_witnessed == "Yes" & is.na(visitdata$num_witnessed), 1, visitdata$num_witnessed)

代码运行,但 NA 仍然是 NA

我还尝试了这篇文章中的代码:dplyr 根据多个条件替换列中的 na 值 没有一个起作用...它只是生成了一个小标题,其中数据集中的每一列的 NA 都突出显示为红色。请参阅附图,但*注意变量名称在我的实际代码中有所不同,我在这个问题中进行了简化以便于理解。

任何建议或已知代码将不胜感激!

r if-statement conditional-statements switch-statement
1个回答
0
投票

多种选择

base R

ifelse
transform
结合使用(对数据副本进行操作)

transform(visitdata, num_witnessed = 
    ifelse(od_witnessed == "Yes" & is.na(num_witnessed), 1, num_witnessed))
  od_witnessed num_witnessed
1          Yes             3
2          Yes             1
3           No            NA
4          Yes             1

或使用

with
并直接覆盖变量

visitdata$num_witnessed <- with(visitdata, 
  ifelse(od_witnessed == "Yes" & is.na(num_witnessed), 1, num_witnessed))

df
  od_witnessed num_witnessed
1          Yes             3
2          Yes             1
3           No            NA
4          Yes             1

或与

case_when

library(dplyr)

visitdata %>% 
  mutate(num_witnessed = 
    case_when(od_witnessed == "Yes" & is.na(num_witnessed) ~ 1, 
              .default = num_witnessed))
  od_witnessed num_witnessed
1          Yes             3
2          Yes             1
3           No            NA
4          Yes             1
© www.soinside.com 2019 - 2024. All rights reserved.