fct_collapse一次对多个列起作用
fct_collapse function to multiple columns at once
我得到了一个数据集,其中是/否变量都已作为自由文本 (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")
但我想这将需要很多行代码。有没有可能用一行代码加上一个apply函数或者mutate结合across就可以做到?
编辑:我正在寻找的输出是
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
一个简单的解决方案是像这样使用 mgsub
mgsub::mgsub(df,
c("Y", "yes", "y", "n", "NO", "no", "No"),
c("yes", "yes", "yes", "no", "no", "no", "no"))
输出
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
我得到了一个数据集,其中是/否变量都已作为自由文本 (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")
但我想这将需要很多行代码。有没有可能用一行代码加上一个apply函数或者mutate结合across就可以做到?
编辑:我正在寻找的输出是
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
一个简单的解决方案是像这样使用 mgsub
mgsub::mgsub(df,
c("Y", "yes", "y", "n", "NO", "no", "No"),
c("yes", "yes", "yes", "no", "no", "no", "no"))
输出
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