折叠数据框内的多个级别因子

时间:2015-06-24 09:09:04

标签: r dataframe dplyr

我有一个包含大量变量的数据框,并希望将一些变量重新格式化为具有与相同(有序)因子级别相对应的更多数值的因子。请参阅以下示例:

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

我想将变量medfed重新格式化为两个级别的因素: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$"))

1 个答案:

答案 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