【发布时间】:2017-08-20 12:59:25
【问题描述】:
这是一个简化的例子:
library(tidyverse)
frame <- tribble(
~a, ~b, ~c,
1, 1, 2,
5, 4, 7,
2, 3, 4,
3, 1, 6
)
key <- tribble(
~col, ~name, ~type, ~labels,
1, "a", "f", c("one", "two", "three", "four", "five"),
2, "b", "f", c("uno", "dos", "tres", "cuatro"),
3, "c", "f", 1:7
)
是否有一种优雅的方式以编程方式扫过frame 中的列并根据key 中的参数应用特定的因子类?预期的结果是:
# A tibble: 4 x 3
a b c
<fctr> <fctr> <fctr>
1 one uno 2
2 five cuatro 7
3 two tres 4
4 three uno 6
到目前为止,我最好的解决方案是使用 purrr 的 map2(),但是 IMO 的分配不是最优雅的:
frame[key$col] <- map2(key$col, key$labels,
function(x, y) factor(frame[[x]], levels = 1:length(y), labels = y))
有没有人有更整洁的解决方案?请注意,我的原始数据框有数百列,我需要用不同的级别/标签对其中的大多数进行重构,因此该过程必须自动化。
【问题讨论】:
-
Hadley 有一个
forcats包,如果这听起来很有趣的话。 -
谢谢,我看了一下,它非常好 - 但是它没有直接提供按我想要的方式操作数据帧的功能......