根据第二列求和并有条件地计数

2024-04-30

我在试图解决这个看似简单的问题时感到沮丧。我有一个像这样的数据集(df):

structure(list(Year = c(2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 
2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 
2015L, 2015L, 2015L, 2015L, 2015L), Unknown = c(1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L
), Temp = c(21L, 21L, 21L, 23L, 23L, 21L, 21L, 22L, 21L, 23L, 
23L, 22L, 21L, 21L, 22L, 22L, 21L, 21L, 23L, 23L), Obs = structure(c(1L, 
1L, 2L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 2L, 1L, 
1L, 2L, 2L), .Label = c("mdk", "sde"), class = "factor"), State = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L), .Label = "ma", class = "factor"), Zone = c(2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L), Segment = c(8L, 7L, 4L, 17L, 18L, 7L, 2L, 12L, 1L, 17L, 
18L, 12L, 9L, 7L, 13L, 11L, 8L, 9L, 17L, 18L), Subseg = c(1L, 
3L, 3L, 2L, 2L, 2L, 4L, 0L, 10L, 4L, 2L, 0L, 1L, 1L, 3L, 1L, 
2L, 2L, 1L, 1L), Wdir = structure(c(2L, 2L, 1L, 3L, 3L, 2L, 2L, 
1L, 2L, 3L, 3L, 1L, 2L, 2L, 1L, 1L, 2L, 2L, 1L, 1L), .Label = c("na", 
"ne", "nw"), class = "factor"), Wvel = structure(c(1L, 1L, 2L, 
1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 
2L), .Label = c("5", "na"), class = "factor"), Clouds = structure(c(1L, 
1L, 3L, 1L, 1L, 1L, 1L, 3L, 1L, 1L, 1L, 3L, 1L, 1L, 3L, 3L, 1L, 
1L, 3L, 3L), .Label = c("1", "4", "na"), class = "factor"), Temp.1 = structure(c(1L, 
1L, 3L, 1L, 1L, 1L, 1L, 3L, 1L, 1L, 1L, 3L, 1L, 1L, 3L, 3L, 1L, 
1L, 3L, 3L), .Label = c("20", "25", "na"), class = "factor"), 
Species = structure(c(7L, 21L, 1L, 21L, 16L, 4L, 16L, 6L, 
1L, 17L, 5L, 7L, 5L, 1L, 1L, 6L, 7L, 7L, 24L, 5L), .Label = c("ABDU", 
                                                                                                      "ABDU", "ABDU", "ABDU", "ABDU", "CAGO", "CAGO", "CAGO", "CAGO", 
                                                                                                      "CAGO", "GOLD", "GOLD", "GOLD", "GOLD", "GOLD", "MERG", "MERG", 
                                                                                                      "MERG", "MERG", "MERG", "SCOT", "SCOT", "SCOT", "SCOT", 
                                                                                                      "SCOT", "SCOT", "SCOT"), class = "factor"), Count = c(5L, 
1L, 150L, 3L, 20L, 8L, 5L, 10L, 5L, 1L, 20L, 10L, 2L, 2L, 
80L, 40L, 1L, 1000L, 2L, 20L)), .Names = c("Year", "Unknown", 
"Temp", "Obs", "State", "Zone", "Segment", "Subseg", "Wdir", 
"Wvel", "Clouds", "Temp.1", "Species", "Count"), row.names = c(666L, 
614L, 2060L, 1738L, 1459L, 536L, 197L, 2467L, 98L, 1794L, 1449L, 
2464L, 696L, 483L, 2644L, 2350L, 686L, 844L, 2989L, 2934L), class = "data.frame")

标题看起来像这样:

 Year Unknown Temp Obs State Zone Segment Subseg Wdir Wvel
666  2015       1   21 mdk    ma    2       8      1   ne    5
614  2015       1   21 mdk    ma    2       7      3   ne    5
2060 2015       1   21 sde    ma    2       4      3   na   na
1738 2015       1   23 mdk    ma    2      17      2   nw    5
1459 2015       1   23 mdk    ma    2      18      2   nw    5
536  2015       1   21 mdk    ma    2       7      2   ne    5
 Clouds Temp.1 Species Count
666       1     20    CAGO     5
614       1     20    SCOT     1
2060     na     na    ABDU   150
1738      1     20    SCOT     3
1459      1     20    MERG    20
536       1     20    ABDU     8

除 dplyr 中的其他内容外,当我按段分组时,我希望将每个物种的总和作为新列。这是我尝试过多种变体的最终代码。

df_group = df %>%
  group_by(Segment) %>%
  summarise(temp = round(mean(Temp)),   
            WDir = round(mean(Wdir)),
            ABDU = sum(which(Species=="ABDU"),Count),
            CAGO = sum(which(Species=="CAGO"),Count),
            GOLD = sum(which(Species=="GOLD"),Count),
            MERG = sum(which(Species=="MERG"),Count),
            SCOT = sum(which(Species=="SCOT"),Count))

这就是我得到的(显示正确的格式):

Segment temp WDir ABDU CAGO GOLD MERG SCOT
1       1   21    2    6    5    5    5    5
2       2   21    2    5    5    5    6    5
3       4   21    1  151  150  150  150  150
4       7   21    2   16   11   11   11   12
5       8   21    2    6    9    6    6    6
6       9   21    2 1003 1004 1002 1002 1002

格式和总体思路是我想要的,但数字并没有按照我想要的方式相加。我确信这很简单,但需要一些帮助!谢谢。


问题是它返回位置向量,但您没有使用它们来进行子集化。因此,您得到的总和是除计数变量之外的真实位置的总和。例如

x <- c("a", "b", "b")
count <- c(10, 11, 12)
sum(which(c("a", "b", "b") == "b"), count)
# 38 because it is 2 + 3 + 10 + 11 + 12

我相信你想要的是(或者至少一种编写方式):

sum(ifelse(x == "b", count, 0))
# 23 because it is equal to 0 + 11 + 12

转换为 dplyr 语法,您的示例可能如下所示:

df_group = df %>%
  group_by(Segment) %>%
  summarise(temp = round(mean(Temp)),   
            WDir = round(mean(Wdir)),
            ABDU = sum(ifelse(Species=="ABDU", Count, 0L)),
            CAGO = sum(ifelse(Species=="CAGO", Count, 0L)),
            GOLD = sum(ifelse(Species=="GOLD", Count, 0L)),
            MERG = sum(ifelse(Species=="MERG", Count, 0L)),
            SCOT = sum(ifelse(Species=="SCOT", Count, 0L)))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据第二列求和并有条件地计数 的相关文章

随机推荐

  • 如何检索使用 Apache 的 mod_ldap 进行身份验证的用户的用户信息?

    我使用 Apache 进行 LDAP 身份验证 现在我需要知道如何获取使用 PHP 登录的用户 有可能吗 我是否必须在 PHP 中进行身份验证才能存储用户名 如果您激活 mod authnz ldap 模块并按如下方式配置您的部分
  • 当 S3 上的 ZIP 包更改时如何更新 aws_lambda_function Terraform 资源?

    Zip 包不是由 Terraform 上传到 S3 Lambda 由 Terraform aws lambda function 资源配置 当我在 S3 上更改 Zip 包并运行时terraform apply命令 Terraform 说没
  • 在控制台应用程序中使用 swift 处理可可按键事件(按下按键)

    好吧 我正在尝试登录控制台输出按下的键 我只是无法理解可可的结构 无论是 Obj c 还是 swift 我不是这两种语言的大师 但是 这是我的代码 import Cocoa import Foundation import AppKit v
  • 使用 git,如何在冲突期间“使用他们的”?

    使用 git 如何执行 使用他们的 类型的分支合并命令 该命令应该用原始版本覆盖我的本地版本 要将您的 master 替换为 origin master git checkout master git branch M master old
  • SSDT-BI 可以与 SQL Server 2008 R2 一起使用吗?

    有人可以告诉我在 Visual Studio 2012 或 2013 中开发的 SSIS 包是否可以在 2008r2 服务器上运行吗 如果是 2008r2服务器上还需要安装其他软件吗 这里不关心部署 我只想通过 sql 代理作业在 2008
  • 同位素重叠图像?

    似乎它只发生在 Chrome 和 Safari 中 而不是 Firefox 我将它与基础响应框架一起使用 所以我不确定如何设置高度 Chrome Safari 中的图像之间似乎也没有足够的间距 我该如何解决 编辑 这是一个小提琴http j
  • 在 NuGet 包中添加解决方案级项目

    我想通过 NuGet 包将解决方案文件夹和解决方案项 不是项目 添加到解决方案文件中 我想这将通过 Powershell 来完成 我浏览了 NuGet Powershell 和 EnvDTE 的文档 但无法弄清楚 我会使用哪些命令 方法 我
  • 可以设计自定义推文按钮并利用数据属性吗?

    我正在使用自己的样式创建自定义推文按钮 但是当您选择自定义自己的样式时 您似乎无法使用数据属性 数据文本 数据网址等 仅当您使用使用小部件 javascript 的 Twitter 样式按钮时 数据属性的使用才显得可用 http platf
  • 从 Fortran 字符串中提取单个字符

    我需要一个程序将基数 a 转换为基数 b 其中基数 a 和 b 可以是从 2 到 36 我的想法是使用字符串作为数字 作为中介转换为基数 10 然后从基数 10 转换为基数 b 由于我是 Fortran 新手 我不太理解函数和子字符串 现在
  • 如何从 ScheduledExecutorService 中删除任务?

    我有一个ScheduledExecutorService定期执行一些不同的任务scheduleAtFixedRate Runnable INIT DELAY ACTION DELAY TimeUnit SECONDS 我也有不一样的Runn
  • 使用 Underscore debounce 获取事件对象[React]

    我正在尝试对我已设法做到的操作使用去抖 但是我想将 e 作为参数传递 但它不起作用 我有什么办法可以做到这一点吗 constructor props context super props context this testing debo
  • Jupyter Notebook 上未显示结构化流输出

    我有两个笔记本 第一个笔记本正在使用 tweepy 从 twitter 读取推文并将其写入套接字 其他笔记本正在使用 Spark 结构化流 Python 从该套接字读取推文并将其结果写入控制台 不幸的是我没有在 jupyter 控制台上得到
  • Logstash 过滤器将“$epoch.$microsec”转换为“$epoch_millis”

    我正在尝试转换表单中的时间戳字段 epoch microsec to epoch millis Example 1415311569 541062 gt 1415311569541 Logstash 似乎没有任何乘法的方法 所以ts 100
  • WPF - 从 WPF 应用程序切换到 xbap

    我有一个可用的 WPF 应用程序 我希望看到它作为 xbap 运行 我需要在 WPF 应用程序中更改哪些内容才能使其作为 xbap 运行 当谈到可以以图形方式执行的操作时 两者之间的唯一区别是 XBAP 无法使用 BitmapEffects
  • 在 Kubernetes 中向 MySQL 添加另一个用户

    这是我的MySQL apiVersion apps v1beta1 kind Deployment metadata name abc def my mysql namespace abc sk test labels project ab
  • jQueryUI:正确删除可拖动元素

    我正在开发一个可视化编辑器 它需要用户可以根据需要添加 删除和拖动元素 每个元素都是一个div使用 jQueryUI 实现可拖动 新元素被附加到父元素上div代表工作空间 每个元素内部都有一个用于将其删除的按钮 这一切都很好 我遇到的问题是
  • 用于多部分/表单数据的 POSTMAN

    如何将 POSTMAN 用于 Multipart form data 它具有自定义标头来测试我的控制器 该控制器采用 2 个文件作为参数 public controller MultipartFile files POST HTTP 1 1
  • 未捕获(承诺中)语法错误:获取函数中出现意外的标记'

    我有几个结构如下的 JSON 文件 我们称之为 info json data title Job company Company past fulltime Former Company intern Women IT Priority 5
  • Joomla:在组件中编写和调用辅助函数

    初出茅庐的 Joomla PHP 开发人员 在了解如何做到这一点时遇到了困难 我发现搜索的所有内容都是旧版本的 Joomla 或其他框架 因此第一次时一切都很混乱 我想要一个可以从组件中的任何位置调用的辅助函数 基本上它需要一个用户 ID
  • 根据第二列求和并有条件地计数

    我在试图解决这个看似简单的问题时感到沮丧 我有一个像这样的数据集 df structure list Year c 2015L 2015L 2015L 2015L 2015L 2015L 2015L 2015L 2015L 2015L 20