亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用dplyr總結多列?

用dplyr總結多列?

浮云間 2019-07-01 16:15:50
用dplyr總結多列?我有點糾結于dplyr語法。我有一個具有不同變量和一個分組變量的數據框架?,F在,我想使用R中的dplyr計算每一組中每列的平均值。df <- data.frame(     a = sample(1:5, n, replace = TRUE),      b = sample(1:5, n, replace = TRUE),      c = sample(1:5, n, replace = TRUE),      d = sample(1:5, n, replace = TRUE),      grp = sample(1:3, n, replace = TRUE))df %>% group_by(grp) %>% summarise(mean(a))這給出了“GRP”表示的每個組的“a”列的平均值。我的問題是:是否有可能一次獲得每個組中每一列的方法?還是我要重復一遍df %>% group_by(grp) %>% summarise(mean(a))每一列?我想要的是df %>% group_by(grp) %>% summarise(mean(a:d)) # "mean(a:d)" does not work
查看完整描述

3 回答

?
藍山帝景

TA貢獻1843條經驗 獲得超7個贊

我們可以用summarize_atsummarize_allsummarize_if在……上面dplyr 0.7.4..我們可以通過以下方式設置多個列和多個函數varsfuns參數如下代碼所示。Funs公式的左邊被指定為摘要vars的后綴.在dplyr 0.7.4summarise_each(和mutate_each)已經被廢棄,因此我們不能使用這些函數。

options(scipen = 100, dplyr.width = Inf, dplyr.print_max = Inf)library(dplyr)packageVersion("dplyr")# [1] ‘0.7.4’set.seed(123)df <- data_frame(
  a = sample(1:5, 10, replace=T), 
  b = sample(1:5, 10, replace=T), 
  c = sample(1:5, 10, replace=T), 
  d = sample(1:5, 10, replace=T), 
  grp = as.character(sample(1:3, 10, replace=T)) # For convenience, specify character type)df %>% group_by(grp) %>% 
  summarise_each(.vars = letters[1:4],
                 .funs = c(mean="mean"))# `summarise_each()` is deprecated.# Use `summarise_all()`, `summarise_at()` or `summarise_if()` instead.# To map `funs` over a selection of variables, use `summarise_at()`# Error: Strings must match column names. Unknown columns: mean

您應該更改為以下代碼。以下代碼都有相同的結果。

# summarise_atdf %>% group_by(grp) %>% 
  summarise_at(.vars = letters[1:4],
               .funs = c(mean="mean"))df %>% group_by(grp) %>% 
  summarise_at(.vars = names(.)[1:4],
               .funs = c(mean="mean"))df %>% group_by(grp) %>% 
  summarise_at(.vars = vars(a,b,c,d),
               .funs = c(mean="mean"))# summarise_alldf %>% group_by(grp) %>% 
  summarise_all(.funs = c(mean="mean"))# summarise_ifdf %>% group_by(grp) %>% 
  summarise_if(.predicate = function(x) is.numeric(x),
               .funs = funs(mean="mean"))# A tibble: 3 x 5# grp a_mean b_mean c_mean d_mean# <chr>  <dbl>  <dbl>  <dbl>  <dbl># 1     1   2.80   3.00    3.6   3.00# 2     2   4.25   2.75    4.0   3.75# 3     3   3.00   5.00    1.0   2.00

您還可以具有多個函數。

df %>% group_by(grp) %>% 

  summarise_at(.vars = letters[1:2],

               .funs = c(Mean="mean", Sd="sd"))

# A tibble: 3 x 5

# grp a_Mean b_Mean      a_Sd     b_Sd

# <chr>  <dbl>  <dbl>     <dbl>    <dbl>

# 1     1   2.80   3.00 1.4832397 1.870829

# 2     2   4.25   2.75 0.9574271 1.258306

# 3     3   3.00   5.00        NA       NA


查看完整回答
反對 回復 2019-07-01
  • 3 回答
  • 0 關注
  • 849 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號