标签: summarize

如何解释 dplyr 消息“summarise()”通过“x”重新分组输出(用“.groups”参数覆盖)?

在更新到 dplyr 开发版本 0.8.99.9003 后运行 group_by 和 summarise() 时,我开始收到一条新消息(见帖子标题)。

以下是重新创建输出的示例:

library(tidyverse)
library(hablar)
df <- read_csv("year, week, rat_house_females, rat_house_males, mouse_wild_females, mouse_wild_males 
               2018,10,1,1,1,1
               2018,10,1,1,1,1
               2018,11,2,2,2,2
               2018,11,2,2,2,2
               2019,10,3,3,3,3
               2019,10,3,3,3,3
               2019,11,4,4,4,4
               2019,11,4,4,4,4") %>% 
  convert(chr(year,week)) %>% 
  mutate(total_rodents = rowSums(select_if(., is.numeric))) %>% 
  convert(num(year,week)) %>% 
  group_by(year,week) %>% summarise(average = mean(total_rodents))
Run Code Online (Sandbox Code Playgroud)

输出 tibble 是正确的,但出现此消息:

summarise()按“年份”重新分组输出(用.groups参数覆盖)

这应该如何解释?当我按年和周分组时,为什么它只报告按“年”重新分组?另外,覆盖是什么意思,我为什么要这样做?

我不认为该消息表明存在问题,因为它出现在整个 dplyr 小插图中:https ://cran.r-project.org/web/packages/dplyr/vignettes/programming.html

我相信这是一条新消息,因为它只出现在最近的 SO 问题上,例如如何使用 dplyr 融化pairwise.wilcox.test 输出?R 聚合多列(都没有解决重组/覆盖消息)。

谢谢!

r dplyr summarize

161
推荐指数
2
解决办法
10万
查看次数

dplyr使用单个函数的多个返回值汇总()

我想知道是否有一种方法可以使用函数with summarise(dplyr 0.1.2)返回多个值(例如包中的describe函数psych).

如果没有,是因为它尚未实施,还是有理由不是一个好主意?

例:

require(psych)
require(ggplot2)
require(dplyr)

dgrp <- group_by(diamonds, cut)
describe(dgrp$price)
summarise(dgrp, describe(price))
Run Code Online (Sandbox Code Playgroud)

生产: Error: expecting a single value

r vector dplyr summarize

34
推荐指数
2
解决办法
2万
查看次数

dplyr总结了熊猫中的等价物

我曾经和R一起工作,真的很喜欢你可以轻松分组并总结的dplyr软件包.

但是,在pandas中,我没有看到相当的总结,这是我在Python中实现它的方式:

import pandas as pd
data = pd.DataFrame(
    {'col1':[1,1,1,1,1,2,2,2,2,2],
    'col2':[1,2,3,4,5,6,7,8,9,0],
     'col3':[-1,-2,-3,-4,-5,-6,-7,-8,-9,0]
    }
)
result = []
for k,v in data.groupby('col1'):
    result.append([k, max(v['col2']), min(v['col3'])])
print pd.DataFrame(result, columns=['col1', 'col2_agg', 'col3_agg'])
Run Code Online (Sandbox Code Playgroud)

它不仅非常冗长,而且可能不是最优化和最有效的.(我曾经重写过一个dplyr实现for-loop groupby,性能提升很大).

在R中代码将是

data %>% groupby(col1) %>% summarize(col2_agg=max(col2), col3_agg=min(col3))
Run Code Online (Sandbox Code Playgroud)

在Python或for循环中是否有一个有效的等价物是我必须使用的.


另外,@ ahan真的给了我答案的解决方案,这是一个后续问题,我将在这里列出而不是评论:

什么是相当于 groupby.agg

python r pandas summarize pandas-groupby

32
推荐指数
2
解决办法
1万
查看次数

在数据框上定义和应用自定义分档

使用python我创建了包含相似度值的以下数据框:

  cosinFcolor cosinEdge cosinTexture histoFcolor histoEdge histoTexture    jaccard
1       0.770     0.489        0.388  0.57500000 0.5845137    0.3920000 0.00000000
2       0.067     0.496        0.912  0.13865546 0.6147309    0.6984127 0.00000000
3       0.514     0.426        0.692  0.36440678 0.4787535    0.5198413 0.05882353
4       0.102     0.430        0.739  0.11297071 0.5288008    0.5436508 0.00000000
5       0.560     0.735        0.554  0.48148148 0.8168083    0.4603175 0.00000000
6       0.029     0.302        0.558  0.08547009 0.3928234    0.4603175 0.00000000
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写一个R脚本来生成另一个反映二进制数据的数据框,但如果该值大于0.5,则应用我的条件条件

伪代码:

if (cosinFcolor > 0.5 & cosinFcolor <= 0.6)
   bin = 1
if (cosinFcolor > 0.6 & cosinFcolor <= 0.7)
   bin = 2 …
Run Code Online (Sandbox Code Playgroud)

r binning dataframe summarize

31
推荐指数
3
解决办法
8万
查看次数

R - dplyr总结并保留其他列

我正在对数据进行分组然后对其进行总结,但是还想保留另一个列.我不需要对该列的内容进行任何评估,因为它始终与group_by列相同.我可以将它添加到group_by语句中,但这似乎并不"正确".我希望State.Full.Name在分组后保留State.谢谢

TDAAtest <- data.frame(State=sample(state.abb,1000,replace=TRUE))
TDAAtest$State.Full.Name <- state.name[match(TDAAtest$State,state.abb)]


TDAA.states <- TDAAtest %>%
  filter(!is.na(State)) %>%
  group_by(State) %>%
  summarize(n=n()) %>%
  ungroup() %>%
  arrange(State)
Run Code Online (Sandbox Code Playgroud)

r dplyr summarize

14
推荐指数
3
解决办法
1万
查看次数

R 中按组划分的总计数百分比

我正在尝试创建一个输出,按因子级别计算计数占总计数(在数据框中)的百分比,但似乎无法弄清楚如何在输出中保留分组结构。

\n

我可以获得我想要除以的总计数...

\n
df %>% summarise(sum(num))\n# 15\n
Run Code Online (Sandbox Code Playgroud)\n

...以及按组划分的总数...

\n
df %>% group_by(species) %>% summarise(sum(num))\n# A tibble: 3 \xc3\x97 2\n#   species                  `sum(num)`\n#   <chr>                         <int>\n# 1 Farfantepenaeus duorarum          4\n# 2 Farfantepenaeus notialis          0\n# 3 Farfantepenaeus spp              11\n
Run Code Online (Sandbox Code Playgroud)\n

但我无法让它看起来像这样......

\n
# ???\n#   species                     Percent\n#   <chr>                         <int>\n# 1 Farfantepenaeus duorarum       4 / 15 = 0.267\n# 2 Farfantepenaeus notialis       0 / 15 = 0.000\n# 3 Farfantepenaeus spp           11 / 15 = 0.733\n
Run Code Online (Sandbox Code Playgroud)\n

我得到的最接近的是这个,但是因为我使用了 reframe() 它返回了未分组的数据

\n
df %>% group_by(species) %>% \n …
Run Code Online (Sandbox Code Playgroud)

r dplyr summarize

8
推荐指数
4
解决办法
252
查看次数

应用group_by和summarise(sum),但保留具有不相关冲突数据的列?

我的问题与Applying group_by非常相似,并在保留所有列信息的同时对数据进行汇总, 但我想保留被排除的列,因为它们在分组后会发生冲突。

Label <- c("203c","203c","204a","204a","204a","204a","204a","204a","204a","204a")
Type <- c("wholefish","flesh","flesh","fleshdelip","formula","formuladelip",
          "formula","formuladelip","wholefish", "wholefishdelip")
Proportion <- c(1,1,0.67714,0.67714,0.32285,0.32285,0.32285, 
                0.32285, 0.67714,0.67714)
N <- (1:10)
C <- (1:10)
Code <- c("c","a","a","b","a","b","c","d","c","d")

df <- data.frame(Label,Type, Proportion, N, C, Code)
df

   Label           Type Proportion  N  C Code
1   203c      wholefish     1.0000  1  1    c
2   203c          flesh     1.0000  2  2    a
3   204a          flesh     0.6771  3  3    a
4   204a     fleshdelip     0.6771  4  4    b
5   204a        formula     0.3228  5  5    a
6   204a   formuladelip …
Run Code Online (Sandbox Code Playgroud)

group-by r summarize tidyverse mutate

7
推荐指数
3
解决办法
5699
查看次数

如何使用R dplyr的summary来计算符合条件的行数?

我有一个想要总结的数据集。首先,我想要主客场比赛的总和,这是我可以做到的。但是,我还想知道每个子类别(主场、客场)中有多少个异常值(定义为超过 300 分)。

如果我没有使用summary,我知道dplyr有这个count()功能,但我希望这个解决方案出现在我的summarize()通话中。这是我所拥有的和我尝试过的但未能执行的内容:

#Test data
library(dplyr)

test <- tibble(score = c(100, 150, 200, 301, 150, 345, 102, 131),
                  location = c("home", "away", "home", "away", "home", "away", "home", "away"),
                  more_than_300 = c(FALSE, FALSE, FALSE, TRUE, FALSE, TRUE, FALSE, FALSE))


#attempt 1, count rows that match a criteria
test %>%
  group_by(location) %>%
  summarize(total_score = sum(score),
            n_outliers = nrow(.[more_than_300 == FALSE]))
Run Code Online (Sandbox Code Playgroud)

r subset counting dplyr summarize

7
推荐指数
1
解决办法
4326
查看次数

使用 na.rm = TRUE 时总结返回 -inf

我最近构建了一个简单的 R 脚本来总结三个不同的数据框。自从更新到最新版本的 R 和 R Studio 后,我遇到了以前从未见过的输出,在 dplyr 中仅对其中一个数据帧使用汇总函数(其他两个都很好)。我还收到了一系列我不熟悉的警告。请注意,在更新之前,我完全按照编写的方式运行脚本,任何数据框都没有问题。

有问题的数据框称为VO2,其设置如下:

Name        Sex       VO2
AthleteA    M         50
AthleteA    M         52
AthleteA    M         NA
AthleteB    M         49
AthleteB    M         56
AthleteB    M         47 
AthleteC    M         42
AthleteC    M         NA
AthleteC    M         41 
AthleteD    M         NA
AthleteD    M         NA
AthleteD    M         NA 
Run Code Online (Sandbox Code Playgroud)

我运行的代码是:

Test.Summary.VO2 = VO2 %>% group_by(Name, Sex) %>% 
summarise(Best.Score = max(VO2, na.rm=TRUE))
Run Code Online (Sandbox Code Playgroud)

此代码生成以下摘要:

Name       Sex     Best.Score
AthleteA    M        52
AthleteB    M        56
AthleteC    M        42
AthleteD    M        -Inf
Run Code Online (Sandbox Code Playgroud)

-Inf 值在输出中是全新的。我无法弄清楚为什么它现在出现在只有 …

r dplyr summarize

6
推荐指数
1
解决办法
2462
查看次数

r summarise_if 有多个条件

我试图将观察的 df 减少到单个观察(单行)。我想 summarise_if 是带有均值的数字,而 if 是带有模式的字符串或因子。下面的代码不起作用,但我希望它给出了想法。谢谢!

#data frame
num <- c(1:7)
str <- c("toy","control","play",NA,"give","toy","toy")
df_finale <- data.frame(num,str)

#mode function
Mode <- function(x) {
        ux <- unique(x)
        ux[which.max(tabulate(match(x, ux)))]
}

#df reduction
df_finale <- df_finale %>%
                    summarize_if(is.numeric, mean, na.rm = TRUE) %>%
                    summarize_else_if(!is.numeric, Mode)
Run Code Online (Sandbox Code Playgroud)

r mode reduction dplyr summarize

6
推荐指数
1
解决办法
446
查看次数