r - fct_collapse 函数一次到多个列
问题描述
我有一个数据集,其中是/否变量都已作为自由文本(facepalm)输入。
起初,我尝试将 fct_collapse 函数应用于数据框中的每一列,但考虑到有 50 多列是和否,这需要大量编码。
pid = c(1,2,3,4,5)
a = c("y", "Y", "no", "no", "NO")
b = c("yes", "Y", "y", "no", "n")
c = c("Y", "no", "n", "no", "No")
df <- data.frame(a,b,c)
我试过
df$a <- fct_collapse(df$a, yes = c("y", "Y"), no = c("no", "NO")
但我想这将需要很多行代码。是否可以使用带有应用函数的一行代码来完成它,或者结合使用 mutate 来完成?
编辑:我正在寻找的输出是
a2 = c("yes", "yes", "no", "no", "no")
b2 = c("yes", "yes", "yes", "no", "no")
c2 = c("yes", "no", "no", "no", "no")
df2 <- data.frame(pid,a2,b2,c2)
解决方案
我们可以across
用来循环列
library(dplyr)
library(forcats)
df %>%
mutate(across(-pid, ~ fct_collapse(.,
yes = c('y', 'Y'), no = c('no', 'NO', 'n'))))
-输出
# pid a b c
#1 1 yes yes yes
#2 2 yes yes no
#3 3 no yes no
#4 4 no no no
#5 5 no no No
推荐阅读
- r - 用R中的向量列表替换小标题列表中的指定列
- javascript - 通过另一个数组(长度更短)订购关联 javascript 数组的最有效方法?
- anaconda - 在 Anaconda 或终端上打开 Jupyter Notebook 的区别
- android - 提高 android 布局文件的性能
- pyspark - 如何在pyspark中读取csv文件?
- r - Slides presentation using R
- python - How to solve "Error: [Win Error2] The system cannot find the file specified"
- reactjs - Problem with sorting for pagination in Meteor after viewing a document detail
- python - 从字符串输入中过滤元素
- c++ - I could not notice any difference in output, with and without using std::flush