R 中多个条件的高效条件求和

2024-02-14

我正在努力寻找解决以下问题的有效解决方案:

我有一个大型的已处理数据框,大约有 8 列和 80000 行,通常包含多种数据类型。 如果满足大数据框中的条件,我想创建一个新的数据框,其中包含一列的总和。

想象一下原始数据帧的头部看起来像这样。 $years.raw 列表示该公司测量了 x 年的数据。

> cbind(company.raw,years.raw,source,amount.inkg)
     company.raw years.raw source      amount.inkg
[1,] "C1"        "1"       "Ink"       "5"        
[2,] "C1"        "1"       "Recycling" "2"        
[3,] "C2"        "1"       "Coffee"    "10"       
[4,] "C2"        "1"       "Combusted" "15"       
[5,] "C2"        "2"       "Printer"   "14"       
[6,] "C2"        "2"       "Tea"       "18"   

我现在需要做的是创建一个新的数据框,根据某些字符串元素对每个公司和每年的 $amount.inkg 列的值进行求和。 我将字符串元素保存在下面的三个向量中。字符串元素是原始数据框中 $source 列的一部分。

> vector1 <- c("Tea","Coffee")
> vector2 <- c("Ink","Printer")
> vector3 <- c("Recycling","Combusted")

首选数据框将如下所示:

Company Year              amount.vector1    amount.vector 2 amount.vector 3
C1           1                 0             5                 2
C2           1                 10            0                15        
C2           2                 18            14                0

$amount.vector1 的一般方法是: 对每个公司和每年的 $amount.inkg 列的值进行求和,其中原始数据框列 $source 的字符串元素== vector1 的字符串元素。 当然,$amount.vector2 列的元素不同,但情况相同。

如果没有可用值,则应添加“0”而不是 NA 错误。 这需要对整个原始数据框架进行,其中包括大约 250 家公司,其中每家公司的数据比例为 1:8(差异很大)。

编辑:对于数据框,我需要每家公司每年一行。

C1 Year 1  
C1 Year 2
C1 Year 3
C2 Year 1
C2 Year 2

我尝试编写一个结合这些条件的函数,但失败了。 我对 R 很陌生,不知道如何链接这些条件并将它们应用到整个数据框。


您的数据采用“长格式”(多行公司、来源、年份...)

你想要总计的每个公司和年份的 amount.inkg,用于多个来源值。具体来说,您希望在“源”字段上使用条件进行聚合。

再次,请给我们提供可重现的示例。 (谢谢乔西尔伯)。 这是一个带有分割-应用-组合(ddply)或逻辑索引的四行:

df = data.frame(company.raw = c("C1", "C1", "C2", "C2", "C2", "C2"),
                years.raw = c(1, 1, 1, 1, 2, 2),
                source = c("Ink", "Recycling", "Coffee", "Combusted", "Printer", "Tea"),
                amount.inkg = c(5, 2, 10, 15, 14, 18))

# OPTION 1. Split-Apply-Combine: ddply(...summarize) with a conditional on the data
require(plyr) # dplyr if performance on large d.f. becomes an issue
ddply(df, .(company.raw,years.raw), summarize,
    amount.vector1=sum(amount.inkg[source %in% c('Tea','Coffee')]),
    amount.vector2=sum(amount.inkg[source %in% c('Ink','Printer')]),
    amount.vector3=sum(amount.inkg[source %in% c('Recycling','Combusted')])
)


# OPTION 2. sum with logical indexing on the df:
# (This is from before you modified the question to one-row-per-company-and-per-year)
df$amount.vector1 <- sum( df[(df$source %in% c('Tea','Coffee')),]$amount.inkg )
# josilber clarifies you want one-row-per-company
...

选项 3.您还可以使用aggregate(此处的联机帮助页) https://stat.ethz.ch/R-manual/R-devel/library/stats/html/aggregate.html with subset(...),尽管总和是矫枉过正的。

aggregate(df, source %in% c('Tea','Coffee'), FUN = sum)

The by聚合的参数是操作所在的位置(选择、按条件子集化)。

Note: %in%执行扫描操作,因此如果您的向量和 d.f.变大,或者为了可扩展性,您需要将其分解为可以矢量化的布尔运算:(source=='Tea' | source=='Coffee')

如果子集为空,则要防止 NA 和,sum(c()) = 0所以不用担心。但如果你这样做,要么使用 na.omit,要么做ifelse(is.na(x),0,x)关于最终结果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R 中多个条件的高效条件求和 的相关文章

  • 在 mts 对象上使用 Apply 系列函数

    在 mts 对象上使用 apply 或 sapply 会在发送到函数时删除其时间序列属性 我应该如何在 mts 对象中的每个时间序列上应用相同的函数 带有 ts 输入和 ts 输出 并返回它 最好是 mts 我的意思是除了使用 for 循环
  • 单击并按住 R 中的按钮闪亮?

    我希望能够通过单击 R 闪亮按钮来更改参数的值 所以我需要按钮 一个用于增加值 一个用于减少值 我想在按住按钮的同时保持值以一定的速度减少 增加 通过释放按钮的点击 动作应该停止 到目前为止我还没有找到这个选项actionButtons在
  • udunits2 R 安装:找不到 udunits2.h

    我正在尝试在 R 中安装 udunits2 以满足对ggforce包裹 但是 安装程序在检查 udunits2 时始终失败 我已经尝试过中的说明this https stackoverflow com questions 47059517
  • ggplot 中跨组的连续线

    我有一个数据时间序列 其中观察了一些数据 模拟了一些数据 我想生成整个数据系列随时间变化的图 其中颜色表示数据源 但是 我只能弄清楚如何使 ggplot 中的 geom line 连接同一组中的点 这是一个例子来说明 Create samp
  • R 中 write.table 文件名中的变量

    请帮助我解决一个幼稚的问题 已经用谷歌搜索 并尝试了很多变体 但失败了 如何使用 R 中 write table 的文件名中的变量保存文件 脚本循环遍历 dir 中的文件 应用一些函数 然后将结果保存到具有相同名称但附加结尾的文件中 谢谢
  • 使用 ggplotly(ggplot2 withplotly)时可以去掉注释中的跟踪标签吗?

    使用ggplotly时是否可以删除注释中的跟踪标签 例如 library ggplot2 library plotly g lt ggplot iris aes Sepal Width Sepal Length geom point ann
  • R 条形图中的 X 轴

    我想问一个关于 barplot 轴的问题 首先请看我的数据 SerNo DOY Rain 1 350 0 2 351 0 3 352 0 4 353 0 5 354 0 6 355 0 7 356 0 8 357 0 9 358 0 10
  • 如何在 R 地图库中绘制正确的颜色

    我正在尝试使用 R 地图库为特定国家绘制特定颜色 我可以填写颜色 但它们与各自的国家 地区没有正确关联 我想知道是否有人能知道为什么 我的数据框是 filld 有 3 列 第一列是国家名称 第二列只是一些数字数据 第三列是颜色 countr
  • R:使用管道将单个参数传递到函数中的多个位置

    我试图专门使用管道来重写以下代码 使用babynames包中的babynames数据 library babynames library dplyr myDF lt babynames gt group by year gt summari
  • R:在 Shiny 中,如何修复应用于“反应性”类对象的“xtable”没有适用的方法

    我收到此错误 Error in UseMethod xtable no applicable method for xtable applied to an object of class reactive UI R library shi
  • 数据帧中标志切换之间的行的总和/平均值

    我有一个像这样的数据框 id power flag 0 20 0 1 25 0 2 26 1 3 30 1 4 18 0 5 30 0 6 19 0 7 21 1 8 23 0 我正在尝试获取行的平均值 总和power柱子 输出应该是这样的
  • R:在函数中包含循环?

    以下代码可用于创建一个 data frame 其中 Kendall Tau 和 Spearman 相关结果彼此相邻 data mtcars mtcars correlation lt function x y df1 cor data fr
  • 带有嵌套分组变量的多行轴标签,用于 - R 中的堆积条形图

    我想使用 ggplot 制作一个包含多个类别的堆叠条形图 并带有嵌套的标记 X 轴 类似于我使用 Excel 制作的条形图 如此处所示 我尝试使用给出的例子here https stackoverflow com questions 181
  • R中有字典功能吗

    有没有办法在 R 中创建一个 字典 使其具有对 一些效果 x dictionary c Hi Why water c 1 5 4 x Why 5 我问这个是因为我实际上正在寻找两个分类变量函数 所以如果 x dictionary c a b
  • 如何在 Shiny 中动态渲染的 textInput 添加样式元素

    你好堆栈溢出 在我最近提出的问题中 我已经解决了一些与动态渲染 UI 元素相关的主要问题 并在一些了不起的人的帮助下动态创建了观察者 参见此处 动态渲染的 UI 如何在第二次运行时删除旧的反应变量 https stackoverflow c
  • 如何优化 R 中的 sapply 来计算数据帧上的运行总计

    我在 R 中编写了一个函数来按月份计算累积总数 但随着数据集变大 我的方法的执行时间呈指数增长 我是一名 R 程序员新手 你能帮我提高效率吗 该函数以及我调用该函数的方式 accumulate lt function recordnum d
  • 如何制作一连串的ggplots并在它们之间绘制箭头?

    对于一个项目 我需要绘制一些图并在它们之间放置箭头作为序列的指示 我想知道我是否可以用 ggplot 来做到这一点 是否可以使用 ggplot2 绘制一个干净的大箭头并将其添加到最终的多重图中 作为示例 我使用此代码来绘制绘图 librar
  • 使用 dplyr 的 select 引用变量名[重复]

    这个问题在这里已经有答案了 通常我会想要选择变量的子集 其中该子集是函数的结果 在这个简单的例子中 我首先获取与宽度特征相关的所有变量名称 library dplyr library magrittr data iris width var
  • 是否可以将 pd.Series 分配给无序 pd.DataFrame 中的列而不映射到索引(即不重新排序值)?

    在 Pandas 中创建或分配新列时 我发现了一些意外的行为 当我对 pd DataFrame 进行过滤或排序 从而混合索引 然后从 pd Series 创建新列时 Pandas 会重新排序该系列以映射到 DataFrame 索引 例如 d
  • R - 如何为数据范围内的缺失值绘制条形图零点?

    假设我对 1 到 10 之间的整数的 200 个点有 10 个观察值 mysample sample rep seq 1 10 20 10 我想用条形图绘制它 barplot table mysample barplot https i s

随机推荐

  • 当选项比屏幕尺寸长时,iOS 7 不会显示多于一行

    iOS 7 在 html 中不显示多于一行options
  • 如何在Unity3D中用C#制作延迟?

    我刚刚开始学习unity c 我遵循了教程 但我想添加一些东西 using UnityEngine using UnityEngine UI using System Collections public class PlayerContr
  • 一条指令清除 PF(奇偶校验标志)——获取结果寄存器中的奇数位

    在x86汇编中 是否可以在一条且只有一条指令中清除奇偶校验标志 在any初始寄存器配置 这相当于创建一个结果寄存器odd位数 以及任何设置标志的操作 明确排除mov 相比之下 设置奇偶校验标志可以在一条指令中完成 cmp bl bl 清除奇
  • Django 反序列化

    我收到以下错误 回溯 最近一次调用最后一次 文件 tests py 第 92 行 位于 test single search 对于serializers deserialize中的return obj json response ensur
  • 无法从资源加载定义

    我有一个 希望 非常基本的问题 我对 Ant 非常不熟悉 我只是尝试使用构建文件 以便为我最近发现的开源应用程序 Rapid Miner 编写一些插件 我一直在尝试使用 Eclipse 来编译它 遵循 Eclipses org 自己的说明
  • 是否有 UTF-16 字符串类型的 Rust 库? (用于编写 Javascript 解释器)

    For most程序 最好内部使用 UTF 8 http utf8everywhere org 并在必要时转换为其他编码 但就我而言 我想编写一个 Javascript 解释器 并且仅存储 UTF 16 字符串 或数组 要简单得多u16 因
  • ARKit根据触摸位置设置ARAnchor变换

    我正在 XCode 9 上使用 AR 入门应用程序 其中在点击场景中创建锚点 override func touchesBegan touches Set
  • 将原始帧转换为 webm 直播流

    我有一个 ASP NET 应用程序 其设置如下 以 656x492 分辨率捕获原始 RGB 帧的相机 这些帧在我的 C 代码中进行处理 带有一些简单的图像 加工 原始图像存储在字节数组中 以及包装在位图容器中 缺少魔法 将原始图像缓冲区转换
  • SVG 检测“fill: none”上的 Onclick 事件

    当我创建一个 svg 矩形时fill black my onclick事件处理程序被调用 当我更换fill black with fill none 当我在矩形内单击时 不会调用我的事件处理程序 而仅在单击border直肠的 我需要更改什么
  • GLSL 片段位置

    在我的 cpp 代码中 我创建了一个四边形列表 其中一些有一个标志 在像素着色器中 我检查是否设置了该标志 如果未设置标志 则四边形将变为红色 例如 如果设置了标志 我想决定每个像素的颜色 所以如果我需要将标记的四边形的一半着色为红色 另一
  • 如何解决 django 管理错误 302 问题?

    我在尝试登录 django 管理页面时不断收到错误 Watching for file changes with StatReloader Performing system checks System check identified n
  • Create React App 提供的react-scripts包需要依赖:

    项目依赖树可能有问题 这可能不是 Create React App 中的错误 而是您需要在本地修复的问题 Create React App 提供的react scripts包需要依赖 babel eslint 9 0 0 不要尝试手动安装它
  • 绑定到窗口高度和宽度的问题

    当我尝试将窗口的高度和宽度绑定到视图模型中的属性时 遇到一些问题 这是一个小示例应用程序来说明该问题 这是app xaml xs中的代码 public partial class App Application protected over
  • Java如何将单引号和双引号编码为HTML实体?

    我该如何编码 into 34 and into 39 我很惊讶 HTML Entities 4 0 中没有定义单引号和双引号 所以StringEscapeUtils无法将这两个字符转义到各自的实体中 还有其他与字符串相关的工具可以做到这一点
  • 当主体可以相对定位时,如何计算 dom 元素的页面位置?

    当我将主体设置为具有 39 像素边距的相对定位元素 我正在为页面顶部的工具栏腾出空间 时 我有一个奇怪的错误开始出现 无论如何 如果您查看大多数网站如何告诉您计算页面元素位置 您将看到如下代码 function getPos elt var
  • Chrome android 高度/滚动问题与页脚和地址栏

    这是我遇到的一个有趣的情况 您正在使用 Android 版 Chrome 当您滚动正文时 地址栏会消失并隐藏 伟大的 现在您想要向页面添加一个固定在底部的页脚 您执行以下操作 html margin 0 padding 0 height 1
  • 画布 ArcTo 混乱

    所以我再次处理环形扇区 这不是我的强项 我可以使用 arc画布上的方法很好 问题来自于需要我的弧线成为路径的一部分 例如 ctx save ctx arc centerX centerY radius startAngle endAngle
  • 使用面向 Net Standard 的 DotNet Core 创建 Azure WebJob 失败并出现错误

    我有一个 dot net core 控制台应用程序 我想在 Azure 中作为 webjob 运行 当它尝试执行时 我在日志中看到 错误 找不到依赖项清单中指定的程序集 程序包 Microsoft DotNet InternalAbstra
  • 简单的 jQuery、PHP 和 JSONP 示例?

    我面临着同源策略问题 通过研究该主题 我发现对于我的特定项目来说 最好的方法是使用 JSONP 来执行跨源请求 我一直在读IBM 的这篇关于 JSONP 的文章 http www ibm com developerworks library
  • R 中多个条件的高效条件求和

    我正在努力寻找解决以下问题的有效解决方案 我有一个大型的已处理数据框 大约有 8 列和 80000 行 通常包含多种数据类型 如果满足大数据框中的条件 我想创建一个新的数据框 其中包含一列的总和 想象一下原始数据帧的头部看起来像这样 yea