【发布时间】:2022-11-14 07:13:09
【问题描述】:
我的代码如下所示:
library(tidyverse)
df <- read.table(header=TRUE, text='
subject sex control q1 q2
1 M 7.9 1 1
2 F 6.3 2 3
3 F 9.5 3 1
4 M 11.5 7 6
')
df %>% mutate_all(~case_when(
. == 1 ~ 7,
. == 7 ~ 1,
TRUE ~ . )
)
我想用 7 替换所有 1,反之亦然,但保留其他所有内容。
错误指出:
错误:
mutate()列subject有问题。 我subject = (structure(function (..., .x = ..1, .y = ..2, . = ..1) ...。 x 必须是双精度向量,而不是整数向量。一个解决方案表明
TRUE ~ as.numeric(as.character(.)) )有效,但随后性别栏为 NA我怎样才能解决这个问题?
编辑(添加): 一个建议是使用嵌套的 if-else,这会起作用,但我真的希望有比以下更好的解决方案:
df %>% mutate_all(~ifelse(. == 1, 7, ifelse(. == 7, 1, .)))想象一长串要替换的值。
【问题讨论】:
-
对于
Sex的所有值,您得到NA并非不合理。您希望将M和F映射到哪些数值?您采用的方法假定字符列中的值是数字的字符串版本 -11.5、7等。Sex的情况并非如此。你需要给 R 一点帮助。另外,请注意mutate_all及其同级已被across取代。 -
当然,mutate_all 可以替换为 mutate(across(everything()...