我有一个数据集,当它在 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 都突出显示为红色。请参阅附图,但*注意变量名称在我的实际代码中有所不同,我在这个问题中进行了简化以便于理解。
任何建议或已知代码将不胜感激!
多种选择
将 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