【发布时间】:2014-06-24 18:55:49
【问题描述】:
我有两个数据框,一个是调查响应选项(级别),一个是编码响应。跨数据框,列具有相同的名称但不一定具有相同的顺序。此外,在级别数据框架内,问题可能有不同数量的响应选项。
levels <- data.frame(restaurant=c("TACO BELL","CHIPOTLE",""),
would_recommend=c("YES","NO",""),
satisfaction=c("VERY SATISFIED","SATISFIED","UNSATISFIED"))
responses <- data.frame(satisfaction=c(2,2,1,1,3,3,2,2),
would_recommend=c(1,2,1,1,2,2,2,1),
restaurant=c(1,2,1,2,1,2,1,2))
响应本质上是水平与水平表中同名列的因子,因此我想将它们转换为因子。
我知道我可以这样做:
for (i in 1:length(responses)){
resp_levels <- levels[,match(names(responses)[i],names(levels))]
responses[,i]<-factor(x=resp_levels[responses[,i]],levels=resp_levels)
}
有没有一个聪明的方法可以在没有 For 循环的情况下做到这一点?
【问题讨论】:
-
请不要害怕这里的 for 循环。恕我直言,您的解决方案足够聪明。这样的任务肯定不会成为您代码中的瓶颈,除非您对其进行数千次评估...