【发布时间】:2018-08-28 20:13:27
【问题描述】:
假设我有一个如下所示的数据框:
fact_code style_serial ss rib button rib_s button_s
1008 style_1018 1 0 0 1 1
1008 style_1018 0 1 0 1 1
1008 style_1018 0 1 0 1 1
1008 style_1018 0 0 1 1 1
1008 style_1003 1 0 1 0 1
1008 style_1003 0 0 1 0 1
1008 style_1003 0 0 0 0 1
1008 style_1003 0 0 0 0 1
1004 style_1197 1 0 0 1 0
1004 style_1197 0 0 0 1 0
1004 style_1197 0 0 0 1 0
1004 style_1197 0 1 0 1 0
关键变量 rib 和 button 是虚拟变量。它们表明工厂生产的特定服装款式是否有罗纹或纽扣或两者都有。然后我想取这些虚拟变量中的最大值,这些虚拟变量按fact_code 和style_serial 分组,在这种情况下,我将它们命名为rib_s 和button_s。
变量rib_s和button_s生成如下:
df <- df %>% group_by(fact_code, style_serial) %>% mutate(rib_s = max(rib, na.rm = TRUE))
df <- df %>% group_by(fact_code, style_serial) %>% mutate(button_s = max(button, na.rm = TRUE))
现在假设我有大约 20 个这样的变量。我想创建一个循环,该循环运行的次数与变量数量一样多,并且每次都为 20 个虚拟变量中的每一个执行上述代码。
我已经对 2 个变量进行了测试:
for (xx in c("rib", "button")){
df <- df %>%
group_by_(fact_code, style_serial) %>%
yy <- paste0(c(xx, "s"), collapse = "_") %>%
mutate_(yy = max(xx, na.rm = TRUE))
}
但它给了我以下错误信息:
Error in UseMethod("mutate_") :
no applicable method for 'mutate_' applied to an object of class "character"
我也尝试过基本 r 函数,例如 tapply 和 aggregate,但总是收到一些错误消息。
你有办法解决这个问题吗?
【问题讨论】: