当前位置: 首页 > 知识库问答 >
问题:

在R 3.3.0 Dplyr v 0.5.0中聚合为字符串并对与聚合相关的值求和

诸超
2023-03-14

问题:

我想简化以下数据框

Fruit <-  c("Apple","Apple","Orange","Orange","Banana","Banana")
Farmer <- c("Bob","Ben","Bill","Bob","George","Bob")
Tons.Jan <- c(20,40,10,20,35,15)
Tons.Feb <- c(30,40,20,15,25,30)
Tons.Mar <- c(10,10,15,10,20,30)
Tons.Apr <- c(15,20,15,30,30,30)
Tons.May <- c(20,5,20,20,20,10)

df <- cbind(Fruit,Farmer)
df <- cbind(df,Tons.Jan)
df <- cbind(df,Tons.Feb)
df <- cbind(df,Tons.Mar)
df <- cbind(df,Tons.Apr)
df <- tbl_df(cbind(df,Tons.May))

我希望能够将农民总结为一个单独的逗号,并将吨与观察结果相加,使其看起来像以下内容

我想谈以下几点

Fruit2 <- c("Apple","Orange","Banana")
Farmer2 <- c("Bob,Ben","Bill,Bob","George,Bob")
Tons.Jan2 <- c(60,30,50)
Tons.Feb2 <- c(70,35,55)
Tons.Mar2 <- c(20,25,50)
Tons.Apr2 <- c(35,45,60)
Tons.May2 <- c(25,40,30)

df2 <- cbind(Fruit2,Farmer2)
df2 <- cbind(df2,Tons.Jan2)
df2 <- cbind(df2,Tons.Feb2)
df2 <- cbind(df2,Tons.Mar2)
df2 <- cbind(df2,Tons.Apr2)
df2 <- tbl_df(cbind(df2,Tons.May2))

我所尝试的:

我尝试过使用dplyr函数组,并在下面对每个函数进行总结

df <- df %>% group_by(Fruit) %>%
   summarise_each_(funs(toString))

然而,我不确定如何集成求和数值,而不使用摘要函数专门调用每一列,

感谢您的帮助。

共有2个答案

游安康
2023-03-14

最好不要做数据。frame(cbind(tbl_df(cbind作为cbind向量s绑定到矩阵,矩阵只能容纳一个类,因此当我们将矩阵更改为数据时,frame(默认选项为stringsAsFactors=TRUE),如果存在任何字符向量矩阵将是所有字符类列,这会变得更糟,因为这些列现在是系数类和数据。帧转换。因此,我们不必要地必须按要求执行。数值(如.character(用于更改数值列的类型。最好将“data.frame”构造为

data.frame(Fruit, Farmer, Tons.Jan, ...)

一个data.table解决方案将是

library(data.table)
setDT(df)[,  Farmer :=  toString(Farmer), by = Fruit][ , 
     lapply(.SD, function(x) sum(as.numeric(as.character(x)))) , .(Fruit, Farmer)]
#    Fruit                   Farmer Tons.Jan Tons.Feb Tons.Mar Tons.Apr Tons.May
#1:  Apple       Bob, Ben, Bob, Ben       60       70       20       35       25
#2: Orange     Bill, Bob, Bill, Bob       30       35       25       45       40
#3: Banana George, Bob, George, Bob       50       55       50       60       30

此外,这可以通过“水果”分组(基于OP的输出)一步完成

setDT(df)[, c(Farmer = toString(Farmer), lapply(.SD[, 
   setdiff(names(.SD), "Farmer"), with = FALSE], 
       function(x) sum(as.numeric(as.character(x))))), .(Fruit)]
#    Fruit      Farmer Tons.Jan Tons.Feb Tons.Mar Tons.Apr Tons.May
#1:  Apple    Bob, Ben       60       70       20       35       25
#2: Orange   Bill, Bob       30       35       25       45       40
#3: Banana George, Bob       50       55       50       60       30

郑俊材
2023-03-14
library(dplyr)

# Convert the relevant columns to numeric
df <- mutate_each(df, funs(as.numeric), -Fruit, -Farmer)

# or as mentioned in the comments by jazzurro
df <- mutate_at(df, vars(starts_with("Tons")), as.numeric)

df %>% 
    group_by(Fruit) %>% 
    mutate(Farmer = toString(Farmer)) %>%
    group_by(Fruit, Farmer) %>%
    summarise_all(funs(sum))


#Source: local data frame [3 x 7]
#Groups: Fruit [?]
#
#   Fruit      Farmer Tons.Jan Tons.Feb Tons.Mar Tons.Apr Tons.May
#   <chr>       <chr>    <dbl>    <dbl>    <dbl>    <dbl>    <dbl>
#1  Apple    Bob, Ben       60       70       20       35       25
#2 Banana George, Bob       50       55       50       60       30
#3 Orange   Bill, Bob       30       35       25       45       40
 类似资料:
  • 问题内容: 我试图理解这些术语的含义。我举了一些例子,例如: 汇总:Facebook 有一个 用户 组成:facebook 中的 每个用户 都有一个 会话。 协会:人们 使用 浏览器 但是我对 具有 和 使用我的 示例感到困惑。为什么不能是用户 使用 Facebook帐户或Facebook 使用 会话来认证用户? 就OOP而言,这是错误的吗?我在哪里想念这个概念? 问题答案: 该 使用 关系意味着

  • 问题内容: 我有一个表的数组列类型: 我想写一个查询,每个标题生成一个数组(理想情况下,它将是一个设置/去重复的数组) 例如 上面的查询当然行不通,但是我想产生2行: 任何帮助或指针将不胜感激(我使用的是Postgres 9.1) 基于Craig的帮助,我得出以下结论(语法略有更改,因为9.1完全按照他的显示抱怨该查询) 问题答案: 自定义汇总 方法1:定义自定义集合。这是我之前写的。 横向查询

  • 我在读一篇关于OOP中的关系、关联、组合、聚合等的文章。有些事情令人困惑 因此,在PHP中,我们调用以下代码组合 在阅读了几篇关于作文的文章后 以下是组成示例: 因此,根据我的理解,聚合意味着A类的对象可以存在于B类之外,而组合意味着A类生命周期的对象取决于B类。 我正确理解了吗?

  • 问题内容: 我找到了一种将不同行中的字符串聚合到sybase ASE 15中的单行中的方法。像这样: T-SQL中的FOR XML PATH之类的东西。 谢谢! 问题答案: Sybase ASE没有任何字符串聚合函数,例如或; 并且虽然有对的支持,但不包括对选件/功能的支持。 假设要追加的行数未知/可变,则唯一的(ASE 15)T-SQL选项将是基于游标的解决方案。 如果发现自己正在使用ASE 1

  • 问题内容: 在vertica中有一个表:像这样测试: 如何使用聚合函数或如何编写查询以获取像这样的数据(vertica语法)? 问题答案: 首先,您需要为编译udx 。 然后,您可以执行如下查询: 使用rtrim摆脱最后一个’,’。 如果您需要以某种方式对聚合进行排序,则可能需要在嵌入式视图中或使用first进行选择/排序。

  • 问题内容: 指定直方图聚合时,是否可以将字符串转换为浮点数?因为我的文档中的字段是浮点型的,但没有通过Elasticsearch解析,因此当我尝试使用字符串字段求和时,它将引发下一个错误。 我知道我可以更改映射,但是对于我有的用例,如果在编写字段的聚合时可以指定类似“ script:_value.tofloat()”的内容,则将更加方便。 这是我的代码: } 问题答案: 你需要这个 对于称为的字段