R:如何一次重新编码多个变量

标签 r dplyr recode

我的数据集中有几个变量需要以完全相同的方式重新编码,还有几个其他变量需要以不同的方式重新编码。我尝试编写一个函数来帮助我解决这个问题,但我遇到了麻烦。

library(dplyr)
recode_liberalSupport = function(arg1){
  arg1 = recode(arg1, "1=-1;2=1;else=NA")
  return(arg1)
}

liberals = c(df$var1, df$var4, df$var8)
for(i in unique(liberals)){
  paste(df$liberals[i] <- sapply(liberals, FUN = recode_liberalSupport))
}

R studio 在这方面工作了大约 5 分钟,然后给了我这个错误信息:
Error in `$<-.data.frame`(`*tmp*`, liberals, value = c(NA_real_, NA_real_,  : 
  replacement has 9 rows, data has 64600
In addition: Warning messages:
1: Unknown or uninitialised column: 'liberals'. 
2: In df$liberals[i] <- sapply(liberals, FUN = recode_liberalSupport) :
  number of items to replace is not a multiple of replacement length

任何帮助将非常感激!谢谢

最佳答案

我认为这更整洁 dplyr .使用 recode正确是个好主意。 mutate_all()可用于对整个数据帧进行操作,mutate_at()在刚刚选择的变量上。在 中有很多方法可以指定变量dplyr .

mydata <- data.frame(arg1=c(1,2,4,5),arg2=c(1,1,2,0),arg3=c(1,1,1,1))

mydata

  arg1 arg2 arg3
1    1    1    1
2    2    1    1
3    4    2    1
4    5    0    1

mydata <- mydata %>% 
     mutate_at(c("arg1","arg2"), funs(recode(., `1`=-1, `2`=1, .default = NaN)))

mydata

  arg1 arg2 arg3
1   -1   -1    1
2    1   -1    1
3  NaN    1    1
4  NaN  NaN    1

我使用 NaN 而不是 NA 因为它是数字,在其他数字的列中管理起来更简单。

关于R:如何一次重新编码多个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48673802/

相关文章:

r - 我如何将 ggplot2 colourbar 的宽度指定为面板宽度的一半?

r - 使用 dplyr 在组内安排

r - 检查一个时间间隔内的任何日期是否在另一个时间间隔内的任何日期内

R - 具有与一个代码关联的多个文本值的重新编码列

r - 计算一列与选择的其他列之间的相关性,无需循环

将字符串中的数字范围替换为单个数字

r - 在 R 中组合两个列表

python - pandas 中的方法链接时如何引用中间数据框?

r - 根据 R 中另一个变量的条件重新编码变量的最简单方法是什么?

根据不同数据帧中的值重新编码第二个数据帧中的值