【发布时间】:2023-01-19 00:11:36
【问题描述】:
我想根据另一个数据集中的值重新编码一个数据集中的值。我的总体目标是在数据框的多个列中应用recode。
数据:
df <- data.frame(
gender=c(1,2,1,2),
condition=c(1,1,2,2)
)
df
gender condition
1 1 1
2 2 1
3 1 2
4 2 2
其他数据集:
codes <- data.frame(
gender_values= c("`1`='male', `2`='female'"),
condition_values = c("`1`='exp', `2`='control'")
)
codes
gender_values condition_values
1 `1`='male', `2`='female' `1`='exp', `2`='control'
试图:
df %>%
dplyr::mutate(
gender= dplyr::recode(gender, cat(noquote(codes[1,"gender_values"])), .default = NA_character_)
)
`1`='male', `2`='female' gender condition
1 <NA> 1
2 <NA> 1
3 <NA> 2
4 <NA> 2
通缉:
gender condition
1 male exp
2 female exp
3 male control
4 female control
【问题讨论】:
-
在你的
codes中,你有c("1='male',2='female'"),这是一个长的单一字符串。这是故意的,还是应该是两个元素(1="male"和2="female")?比如c("1='male'", "2='female'")? -
你确定代码有这种奇怪的形式吗?为什么不记录形式(即 variable_name,variable_vaule,variable_text?或宽形式?最直接的解决方案是使用连接将“重新编码”值绑定到数字......
-
@jpsmith 我打算使用一个长字符串,以便重新编码可以使用这些值。出于某种原因,recode 没有像 recode(gender,
1="male"...) 那样使用值。 -
@dario 我相信它不会,因为我的数据集的值标签在每个变量的一个单元格中。