我有一个包含大量变量的数据框,并希望将一些变量重新格式化为具有与相同(有序)因子级别相对应的更多数值的因子。请参阅以下示例:
mydf <- data.frame(replicate(3,sample(0:2,10,replace=TRUE)))
mydf[6, ] <- c(NA, NA, 2)
names(mydf) <- c("med", "fed", "id")
mydf
med fed id
1 2 2 1
2 0 0 0
3 0 1 0
4 0 1 2
5 1 0 2
6 NA NA 2
7 0 1 2
8 0 2 0
9 0 0 2
10 2 2 2
我想将变量med
和fed
重新格式化为两个级别的因素:0 - &#34; foo&#34;,1,2 - &#34; bar&#34;哪里&#34; foo&#34; &LT; &#34; BAR&#34 ;.我知道我可以单独为变量here:
mydf$med <- `levels<-`(factor(mydf$med, ordered=TRUE), list("foo"=0, "bar"=c(1,2)))
mydf$fed <- `levels<-`(factor(mydf$fed, ordered=TRUE), list("foo"=0, "bar"=c(1,2)))
mydf
med fed id
1 bar bar 1
2 foo foo 0
3 foo bar 0
4 foo bar 2
5 bar foo 2
6 <NA> <NA> 2
7 foo bar 2
8 foo bar 0
9 foo foo 2
10 bar bar 2
table(mydf$med)
foo bar
6 3
对于匹配某些模式的每个变量,有没有办法立即执行此操作?例如。使用dplyr
有点像
mydf %>% mutate_each(funs(???), matches("ed$"))
答案 0 :(得分:3)
正如David Arenburg指出的那样,解决方案很明显,使用dplyr
和单变量案例的提示(使用更简单的多行公式)。
library(dplyr)
myfunc <- function(x) {
x <- factor(x, ordered=TRUE)
levels(x) <- list("foo"=0, "bar"=c(1,2))
x
}
mydf <- mydf %>% mutate_each(funs(myfunc), matches("ed$"))
mydf
med fed id
1 bar bar 1
2 foo foo 0
3 foo bar 0
4 foo bar 2
5 bar foo 2
6 <NA> <NA> 2
7 foo bar 2
8 foo bar 0
9 foo foo 2
10 bar bar 2
table(mydf$med)
foo bar
6 3