R 如何基于另一列求和一列?

R 如何基于另一列求和一列?,r,R,假设数据帧存储为水果,格式如下: State Fruit Category Fruit Type Gross Value ACT CitrusFruit Mandarins $4,500,000 ACT CitrusFruit Oranges NSW PomeFruit

假设数据帧存储为
水果
,格式如下:

State           Fruit Category         Fruit Type         Gross Value
ACT             CitrusFruit            Mandarins          $4,500,000
ACT             CitrusFruit            Oranges            
NSW             PomeFruit              Apple              $139,130,203.50
NSW             Grapes                 Wine Production    $50,000,000
NSW             OrchardStoneFruit      Avocados           $10,031,123
QLD             CitrusFruit            Oranges
我将如何基于状态对总值求和-同时排除空白值。但同时,每个州的总值应该加起来,而不是对柑橘、柚子等单独显示

我试着使用

library(plyr)
counts
方法无效

任何帮助都将不胜感激

编辑: 我尝试使用以下方法:

library(dplyr)
fruit %>% 
  group_by(State) %>% 
  summarise(Gross = sum(Gross))
但是,我得到一个错误,它说:

Evaluation Error: 'sum' not meaningful for factors.
编辑: 来自
dput的输出(水果)


您应该将因子转换为数字,然后求和。以下是我提出的解决方案:

library(tidyverse)

##This line converts the factor into a numeric variable, by making it a character and then removing the commas and the dollar sign. Finally it converts to number
fruit$`Gross Value` <- as.numeric(str_replace_all(as.character(fruit$`Gross Value`),"\\$|\\,",""))

##Then you can run your sum function


fruit %>% 
  group_by(State) %>% 
  summarise(Gross = sum(`Gross Value`, na.rm = TRUE))
库(tidyverse)
##此行将因子转换为数字变量,方法是将其设置为字符,然后删除逗号和美元符号。最后它转换成数字
水果$`总值`%
按(州)分组%>%
总结(总值=总和(`Gross Value`,na.rm=TRUE))

您应该将系数转换为数字,然后求和。以下是我提出的解决方案:

library(tidyverse)

##This line converts the factor into a numeric variable, by making it a character and then removing the commas and the dollar sign. Finally it converts to number
fruit$`Gross Value` <- as.numeric(str_replace_all(as.character(fruit$`Gross Value`),"\\$|\\,",""))

##Then you can run your sum function


fruit %>% 
  group_by(State) %>% 
  summarise(Gross = sum(`Gross Value`, na.rm = TRUE))
库(tidyverse)
##此行将因子转换为数字变量,方法是将其设置为字符,然后删除逗号和美元符号。最后它转换成数字
水果$`总值`%
按(州)分组%>%
总结(总值=总和(`Gross Value`,na.rm=TRUE))

这里有几个问题:

  • 您的数据中没有
    总值
    ,而是
    总值
  • 该列是
    因子
    ,它是一种更高效的字符串存储形式。
    因子
    字符
    都不能是
    sum
    med。R对会计一无所知,因此在这种情况下,
    “$”
    对它来说毫无意义
试试这个:

library(dplyr)
someData %>%
  mutate(Gross.Value = as.numeric(gsub("[^0-9.]", "", as.character(Gross.Value)))) %>%
  group_by(State) %>%
  summarize(Gross.Value = sum(Gross.Value, na.rm=TRUE))
# # A tibble: 8 x 2
#   State Gross.Value
#   <fct>       <dbl>
# 1 ACT            0 
# 2 NSW    564400574.
# 3 NT      20133040.
# 4 QLD   1053007677.
# 5 SA     691850721.
# 6 TAS    112902970.
# 7 VIC   1069102796.
# 8 WA     281014929.
库(dplyr)
某些数据%>%
变异(Gross.Value=as.numeric(gsub(“[^0-9.]”,“”,as.character(Gross.Value)))%>%
按(州)分组%>%
汇总(总值=总和(总值,na.rm=真))
##A tibble:8 x 2
#州总值
#          
#1第0幕
#2新南威尔士州564400574。
#新台币20133040元。
#4昆士兰1053007677。
#5 SA 691850721。
#6塔斯112902970。
#7维克1069102796。
#8 WA 281014929。

我的评论中唯一的变化是:(1)使用正确的列名,(2)添加
na.rm=TRUE
,因为您有许多空格。这意味着您需要小心如何使用这些数据,因为您现在的摘要中存在偏见和不准确之处

这里有几个问题:

  • 您的数据中没有
    总值
    ,而是
    总值
  • 该列是
    因子
    ,它是一种更高效的字符串存储形式。
    因子
    字符
    都不能是
    sum
    med。R对会计一无所知,因此在这种情况下,
    “$”
    对它来说毫无意义
试试这个:

library(dplyr)
someData %>%
  mutate(Gross.Value = as.numeric(gsub("[^0-9.]", "", as.character(Gross.Value)))) %>%
  group_by(State) %>%
  summarize(Gross.Value = sum(Gross.Value, na.rm=TRUE))
# # A tibble: 8 x 2
#   State Gross.Value
#   <fct>       <dbl>
# 1 ACT            0 
# 2 NSW    564400574.
# 3 NT      20133040.
# 4 QLD   1053007677.
# 5 SA     691850721.
# 6 TAS    112902970.
# 7 VIC   1069102796.
# 8 WA     281014929.
库(dplyr)
某些数据%>%
变异(Gross.Value=as.numeric(gsub(“[^0-9.]”,“”,as.character(Gross.Value)))%>%
按(州)分组%>%
汇总(总值=总和(总值,na.rm=真))
##A tibble:8 x 2
#州总值
#          
#1第0幕
#2新南威尔士州564400574。
#新台币20133040元。
#4昆士兰1053007677。
#5 SA 691850721。
#6塔斯112902970。
#7维克1069102796。
#8 WA 281014929。

我的评论中唯一的变化是:(1)使用正确的列名,(2)添加
na.rm=TRUE
,因为您有许多空格。这意味着您需要小心如何使用这些数据,因为您现在的摘要中存在偏见和不准确

您的
$`总价值
实际上是
“$4500000”
?如果是这样,您需要首先转换为一个数字。是的,在csv文件中,它是作为
$4500000
提供的。我在您的示例数据中没有看到“国家”?通常使用
dput(someData)的输出是有帮助的
要向用户提供一些样本数据来解决问题,有两点需要粘贴
dput
输出到问题:(1)它让我们更好地了解数据中的内容,特别是在这里识别因素,尽管这是毫无疑问的;(2)它允许我们快速复制并粘贴到控制台中。不幸的是,你发布的方式在所有内容的前面都包含了评论字符(我已经把它们删掉了),但是让我们更容易找到答案肯定会更快/更好。考虑阅读其他的“好问题”技术:参考文献:你的代码> $'总值' <代码>实际上<代码>“4500000美元”< /代码>?如果是这样,您需要首先转换为一个数字。是的,在csv文件中,它是作为
$4500000
提供的。我在您的示例数据中没有看到“国家”?通常使用
dput(someData)的输出是有帮助的
要向用户提供一些样本数据来解决问题,有两点需要粘贴
dput
输出到问题:(1)它让我们更好地了解数据中的内容,特别是在这里识别因素,尽管这是毫无疑问的;(2)它允许我们快速复制并粘贴到控制台中。不幸的是,你发布的方式在所有内容的前面都包含了评论字符(我已经把它们删掉了),但是让我们更容易找到答案肯定会更快/更好。考虑阅读其他的“好问题”技巧:参考文献:谢谢。我试过了,但是我得到了一个奇怪的错误,我不明白:<代码>错误,谢谢,我试过了,但是我得到了一个奇怪的错误,我不明白:<代码>错误,非常感谢!我不太明白为什么它是
Gross.Value
而不是
Gross-Value
,因为在CSV文件中它列在
Gross-Value
下。另外,是否可以使用
%%>%arrange(desc(n))
以降序显示它?R不喜欢列中的空格