【发布时间】:2019-08-25 22:44:13
【问题描述】:
我有一个长格式的数据集,我在其中将不同组的值相加。有些变量是因子变量,应该保留在结果中。
mtcars$model <- as.factor(rownames(mtcars))
longmtcars <- rbind(mtcars, mtcars, mtcars)
longmtcars$vs <- ifelse(longmtcars$vs == 1, "Yes", "No")
result <- longmtcars %>%
group_by(factor(model)) %>%
summarise_if(is.numeric, sum)
result
# A tibble: 32 x 11
`factor(model)` mpg cyl disp hp drat wt qsec am gear carb
<fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 AMC Javelin 45.6 24 912 450 9.45 10.3 51.9 0 9 6
2 Cadillac Fleetwood 31.2 24 1416 615 8.79 15.8 53.9 0 9 12
3 Camaro Z28 39.9 24 1050 735 11.2 11.5 46.2 0 9 12
4 Chrysler Imperial 44.1 24 1320 690 9.69 16.0 52.3 0 9 12
5 Datsun 710 68.4 12 324 279 11.6 6.96 55.8 3 12 3
我目前的、不可扩展的解决方案
#ugly solution
vsvar <- longmtcars[1:32, "vs"]
result <- cbind(result, vsvar)
result
factor(model) mpg cyl disp hp drat wt qsec am gear carb vsvar
1 AMC Javelin 45.6 24 912.0 450 9.45 10.305 51.90 0 9 6 No
2 Cadillac Fleetwood 31.2 24 1416.0 615 8.79 15.750 53.94 0 9 12 No
3 Camaro Z28 39.9 24 1050.0 735 11.19 11.520 46.23 0 9 12 Yes
这是正确的,但真的很难看,我会在 Shiny App 中使用它,这会造成麻烦,所以目前的方式是不行的。有没有多合一的解决方案?也可以用data.table来做,不过我不是太熟悉。
【问题讨论】:
-
定义“丑陋”?你期望什么输出?
-
类似这样的:结果 % group_by(factor(model)) %>% summarise_if(is.numeric, sum, keepFACTORS = TRUE)
-
解决方案的输出很好,但索引很难在闪亮的应用程序上“缩放”,我更愿意在不创建和合并多个数据帧的情况下这样做
-
"这个是正确的,但是真的很丑,我会在 Shiny App 中使用它,这会造成麻烦,所以现在的方式是不行的"。你读过这个吗?我认为这很清楚:/