在旁边总结变量
Summarize variables beside
我正在为我的问题寻找解决方案。我只能通过手动重新排列来解决它。
Example code:
library(dplyr)
set.seed(1)
Data <- data.frame(
W = sample(1:10),
X = sample(1:10),
Y = sample(c("yes", "no"), 10, replace = TRUE),
Z = sample(c("cat", "dog"), 10, replace = TRUE)
)
#
summarized <- Data %>% group_by(Z) %>% summarise_if(is.numeric,funs(mean,median),na.rm=T)
print(Data)
我希望输出如下所示,每个函数应用于第一个列,然后每个函数应用于第二个列,依此类推。我的代码反之亦然。
当然我可以重新排列列,但这不是数据科学的目的。我有几百个列,想应用多个函数。
这就是我想要的:
summarized <- summarized[,c(1,2,4,3,5)] #best solution yet
有没有我遗漏的参数?我敢打赌有一个简单的解决方案或其他功能可以完成这项工作。
伙计们,提前谢谢!
一个选择是post-处理有足够的select_helpers
library(dplyr)
summarized %>%
select(Z, starts_with('W'), everything())
# A tibble: 2 x 5
# Z W_mean W_median X_mean X_median
# <fct> <dbl> <dbl> <dbl> <dbl>
#1 cat 5.25 5.5 3.75 3.5
#2 dog 5.67 5.5 6.67 7
如果有100个列,一种方法是获取列名的子串,然后排序
library(stringr)
summarized %>%
select(Z, order(str_remove(names(.), "_.*")))
# A tibble: 2 x 5
# Z W_mean W_median X_mean X_median
# <fct> <dbl> <dbl> <dbl> <dbl>
#1 cat 5.25 5.5 3.75 3.5
#2 dog 5.67 5.5 6.67 7
您可以使用 starts_with()
来 select 列,而不是按编号。
library(dplyr)
set.seed(1)
Data <- data.frame(
W = sample(1:10),
X = sample(1:10),
Y = sample(c("yes", "no"), 10, replace = TRUE),
Z = sample(c("cat", "dog"), 10, replace = TRUE)
)
summarized <-
Data %>%
group_by(Z) %>%
summarise_if(is.numeric,funs(mean,median),na.rm=T) %>%
select(Z, starts_with("W_"), starts_with("X_"))
summarized
#> # A tibble: 2 x 5
#> Z W_mean W_median X_mean X_median
#> <fct> <dbl> <dbl> <dbl> <dbl>
#> 1 cat 5.25 5.5 3.75 3.5
#> 2 dog 5.67 5.5 6.67 7
由 reprex package (v0.3.0)
于 2019-12-09 创建
我正在为我的问题寻找解决方案。我只能通过手动重新排列来解决它。
Example code:
library(dplyr)
set.seed(1)
Data <- data.frame(
W = sample(1:10),
X = sample(1:10),
Y = sample(c("yes", "no"), 10, replace = TRUE),
Z = sample(c("cat", "dog"), 10, replace = TRUE)
)
#
summarized <- Data %>% group_by(Z) %>% summarise_if(is.numeric,funs(mean,median),na.rm=T)
print(Data)
我希望输出如下所示,每个函数应用于第一个列,然后每个函数应用于第二个列,依此类推。我的代码反之亦然。
当然我可以重新排列列,但这不是数据科学的目的。我有几百个列,想应用多个函数。
这就是我想要的:
summarized <- summarized[,c(1,2,4,3,5)] #best solution yet
有没有我遗漏的参数?我敢打赌有一个简单的解决方案或其他功能可以完成这项工作。 伙计们,提前谢谢!
一个选择是post-处理有足够的select_helpers
library(dplyr)
summarized %>%
select(Z, starts_with('W'), everything())
# A tibble: 2 x 5
# Z W_mean W_median X_mean X_median
# <fct> <dbl> <dbl> <dbl> <dbl>
#1 cat 5.25 5.5 3.75 3.5
#2 dog 5.67 5.5 6.67 7
如果有100个列,一种方法是获取列名的子串,然后排序
library(stringr)
summarized %>%
select(Z, order(str_remove(names(.), "_.*")))
# A tibble: 2 x 5
# Z W_mean W_median X_mean X_median
# <fct> <dbl> <dbl> <dbl> <dbl>
#1 cat 5.25 5.5 3.75 3.5
#2 dog 5.67 5.5 6.67 7
您可以使用 starts_with()
来 select 列,而不是按编号。
library(dplyr)
set.seed(1)
Data <- data.frame(
W = sample(1:10),
X = sample(1:10),
Y = sample(c("yes", "no"), 10, replace = TRUE),
Z = sample(c("cat", "dog"), 10, replace = TRUE)
)
summarized <-
Data %>%
group_by(Z) %>%
summarise_if(is.numeric,funs(mean,median),na.rm=T) %>%
select(Z, starts_with("W_"), starts_with("X_"))
summarized
#> # A tibble: 2 x 5
#> Z W_mean W_median X_mean X_median
#> <fct> <dbl> <dbl> <dbl> <dbl>
#> 1 cat 5.25 5.5 3.75 3.5
#> 2 dog 5.67 5.5 6.67 7
由 reprex package (v0.3.0)
于 2019-12-09 创建