R 语言:使用 ff 包计算“group by”或拆分时出现问题

2023-12-02

我对 R 几乎是新手,很抱歉如果我提出一些基本问题,但我找不到这个“简单”问题的解决方案: 我有一个患者数据库(大数据库,2500 万行,14 列),每个“id”有几行,例如以下结构:

"id" "birth_date"  "treatment"  "date_treatment"
123   2002-01-01    2            2011-01-03
123   2002-01-01    3            2011-10-03
124   2002-01-01    6            2009-11-07
124   2002-01-01    NA           NA
...   .....         ......       ........ 
1022  2007-01-01    4            2011-01-06

我必须使用 ff 包才能使用少量 RAM,因此所有进程都应该进入 ff 函数。 我想知道,对于每个“id”,他/她收到的最小“年龄”是多少 治疗 = 2 或 4。所以,那就是,每个单独的id,在通用代码中:

if(c(2,4) 中的治疗) then min(治疗日期 - 出生日期)

我只想保留那些最小的“年龄”数据,也许还有 ID。

一种解决方案是:

age_c <- (data$date_treatment - data$birth_date)/365.25;
data$age_c <- age_c;
idx <- ffwhich( data, treatment %in% c(2,4) );
result  <- data[idx,];

这使所有进程都保持在 ff 状态,并且没有内存问题,但是...... 我仍然需要找到一种方法来获取每个 ID 的最低年龄...... ffdfdply 似乎能够做到这一点:

age_fun <- function(x){ 
  min_ <- min.ff(x$age_c); 
  data.frame( age = min_);  
}

 result2 <- ffdfdply(x = data,
               split = data$id,
               FUN = function(x) age_fun(x),
               BATCHBYTES = 5000,
               trace=TRUE
 ); 

这花费了很长的时间,而且还给了我很多不同的错误......

有什么解决办法吗?
这是一个普遍问题,在 SAS 或 SQL 中很容易解决,但我在 R 中找不到正确的组合。 所以一般问题是:

如何计算变量(行)的相同值(组)的行列函数 非常大的数据集???

谢谢 !!


ffdfdply 是您解决问题所需的函数,但您使用它错误且效率低下。将 ffdfdply 视为进入每个 FUN,R 允许您放入 RAM 中的最大数据量,但仍然确保通过 RAM 中的每个 id 获取所有数据(或者如果适合 RAM,则可能是多个 id)。

所以 BATCHBYTES 5000 相当小(你真的只有 5 KB 的 RAM - 我猜不是 - 你在 90 年代的 Commodore 上安装了 R 吗?) 接下来,你的 FUNage_fun 写错了。要查看您在 FUN 中获得的内容,您可以将其打印出来。如 FUN=function(x){ print(head(x))); X}。 在FUN中,你在RAM中获取数据,所以你不需要使用min.ff,min就可以了。

另请注意 joran 的评论:如果您的 RAM 允许,您可以在每个块中获得多个 id。确保您的 FUN 执行拆分-应用-组合策略或在 FUN 中使用 dply。 还有另一句话是为了加快速度。你真的需要通过整个 ffdf.您只需要在函数和拆分中使用的列。所以 ffdfdply(x = data[c("id","age_c","treatment")], split = ...) 会做,否则你会在 RAM 中获得不需要的数据。

简而言之,这样的事情就可以解决问题

require(doBy)
result2 <- ffdfdply(
  x = data[c("id","age_c","treatment")], split = data$id,
  FUN = function(x) summaryBy(age_c ~ id, data=subset(x, treatment %in% c(2,4)), FUN=min))

如果您还想让那些没有接受过治疗 2 和 4 的人也这样做,请这样做。

require(doBy)
result2 <- ffdfdply(
  x = data[c("id","age_c","treatment")], split = data$id,
  FUN = function(x) {
   persons <- unique(x[, "id", drop=FALSE])
   result <- merge(
     persons,
     summaryBy(age_c ~ id, data=subset(x, treatment %in% c(2,4)), FUN=min),
     by.x="id", by.y="id", all.x=TRUE, all.y=FALSE
     )
   result
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R 语言:使用 ff 包计算“group by”或拆分时出现问题 的相关文章

  • R - 如何为数据范围内的缺失值绘制条形图零点?

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

    我有一个示例数据框 df lt data frame x 1 112 y runif 112 有没有办法打印数据框列表 其中列表的第一部分包含行1 10 第二11 20等等 直到最后 111 112 你可以使用split with rep
  • 用plotly创建丝带

    我需要在散点图上绘制加速度与英里 加仑的两个斜率 轻型汽车一处斜坡 重型汽车一处斜坡 我创建了这个 cars light lt cars log cars log log weight lt log mean cars weight car
  • R List with sub-list:将与规则匹配的所有元素提取到数组中

    我有一个 R 对象列表 它们又是各种类型的列表 我想要类别为 内部 的所有对象的 成本 值 实现这一目标的好方法是什么 如果我有一个数据框我会做类似的事情 my dataframe cost my dataframe category in
  • 为什么“str_extract”只捕获其中一些值?

    我有一个表 其中有一个 会员类型 列 其中包括我们多年来使用的无数不同的会员级别 example lt data frame membership c Legacy Payment ID 3564 Payment Record 0 Peri
  • 将 R 中的时间数据绘制为各种分辨率(分钟、小时、秒等)

    我有一些 CSV 数据 例如 Timestamp Count 2009 07 20 16 30 45 10 2009 07 20 16 30 45 15 2009 07 20 16 30 46 8 2009 07 20 16 30 46 6
  • 在 ggplot2 上绘制世界地图

    我一直在尝试在 ggplot2 上绘制世界地图 我跟踪了电子邮件的线索 带 l 的 ggplot 地图 https stackoverflow com questions 9558040 ggplot map with l但我确实遇到了同样
  • 基于列名称的字符向量的子数据框[重复]

    这个问题在这里已经有答案了 菜鸟问题 提前感谢您的耐心 我有一个数据框 vals lt c 1 1 1 1 testdf lt data frame var1 vals var2 vals var3 vals 我有一个变量名称的字符向量 v
  • 超过阈值的时间序列值的聚合计数(按年月)

    我现在正在学习 R 并使用 SEAS 包来帮助我在 R 中进行一些计算 并且数据与 SEAS 包喜欢的格式相同 这是一个时间序列 require seas data mscdata dat int lt mksub mscdata id 1
  • rollapply用于累积窗口[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我试图弄清楚如何在数据窗口上使用 R rollapply 该窗口从数据的开头累积扩展 在时间 t 滚动应用应使用 1 t
  • 如何更新 R 中的包?

    我想将一个 R 包升级到已经可用的新版本 我试过 update packages c R2jags 但它什么也没做 控制台上没有输出 没有错误 什么也没有 我使用了相同的语法install packages但也许我做错了什么 我一直在看 u
  • 在闪亮应用程序的 DT::datatable 中添加、删除和编辑行

    我有下面闪亮的应用程序 我可以通过按添加新行Add基于闪亮的小部件选择 我可以通过按选择并删除一行Delete我想将它们与单击一行的功能结合起来 然后在按Edit 例如 如果我单击第二行 然后更改Security Type小部件来自Stoc
  • 如何在 R 中解析堆叠多个 JSON 的文件?

    我在 R 中有以下 堆叠 JSON 对象 example1 json ID 12345 Timestamp 20140101 Usefulness Yes Code event1 A result 1 ID 1A35B Timestamp
  • 为什么在 data.frame 中预先指定类型会比较慢?

    我预先分配了一个大 data frame 以便稍后填写 我通常这样做NA是这样的 n lt 1e6 a lt data frame c1 1 n c2 NA c3 NA 我想知道如果我预先指定数据类型是否会让事情变得更快 所以我测试了 f1
  • R中无法连接odbc数据库

    我一直在尝试使用以下命令将我公司的 DMS 连接到 RodbcConnect命令 但收到以下消息 myConn lt odbcConnect NZSQL uid cejacobson pwd password Warning message
  • 使用 2 个向量参数翻转函数

    我想对需要 2 个向量参数的函数应用滚动 这是使用 data table 的示例 不起作用 library data table df lt as data table cbind data frame x 1 100 y 101 200
  • 从受密码保护的站点读取信息

    我一直在 R 教程中使用 readLines 从网站上抓取信息 我现在希望从我自己的网站提取数据 特别是 awstats 数据 但是该域受密码保护 有没有一种方法可以通过用户名和密码传递我需要的特定 awstats 数据的 url url
  • 正则表达式提取美国邮政编码,但不提取假代码

    使用 XML 包和 XPath 从网站上抓取地址 有时我只能得到一个嵌入了我想要的邮政编码的字符串 提取邮政编码很简单 但有时会显示其他五位数字的字符串 以下是 df 中问题的一些变体 zips lt data frame id seq 1
  • R 中的点图每行有多个值

    我有以下 R 输入文件 car 1 car 2 car 3 car2 1 car2 2 car2 3 然后 我使用以下命令来绘制图表 autos data 点图 autos data V2 autos data V1 但这将每个汽车和 ca
  • 跨类别和列自动化卡方

    我有一个调查数据框 其中包含几个问题 列 编码为 1 同意 0 不同意 受访者 行 根据 年龄 年轻 中年 老年 地区 东 中 西 等指标进行分类 大约有30个类别总共 3个年龄 3个地区 2个性别 11个职业等 在每个指标中 类别不重叠且

随机推荐

  • Python:如何从导入的模块调用全局函数

    Python 3 中可以从导入函数调用全局函数吗 folders folder1 def py def do test print def do test global function 1 print def do test main p
  • 将 Rust 中的浮点值限制为最小/最大范围

    给定一些任意的浮点值 将该值限制在最小 最大范围的惯用方法是什么 IE 如果您提供的值低于最小值 则返回最小范围值 如果您提供的值大于最大值 则返回最大范围值 否则返回原始浮点值 我认为这种方法可行 但它没有给我正确的值 fn main d
  • 尝试更改 WPF 中绑定的 RadioButton 时出现奇怪的行为

    我在我的中绑定了两个单选按钮Child窗口到Enum in my ViewModel它是在主窗口中构建的 绑定按预期工作 但我注意到一个非常奇怪的行为 我无法解决 我在这里提供了所有代码 以便您可以轻松地自己重构问题 以下是查看这种奇怪行为
  • 应用程序进入后台后每 n 分钟获取用户位置

    我正在努力实施中给出的建议这个帖子 不幸的是 我不清楚这些步骤 我尝试实施这些建议 但即使在启动和停止 locationServices 后 backgroundTimeRemaining 仍继续减少 我是这样开发的 void applic
  • Android 是否按升序或降序覆盖资源文件?

    Android 有各种文件夹来设置其资源 例如 values small values normal values large drawable mdpi drawable hdpi drawable xhdpiAndroid 如何从这些文
  • 循环遍历 Excel 中某个范围的每一行

    这是我确信有一个内置函数的事情之一 而且我很可能在过去被告知过 但我正在挠头去记住它 如何使用 Excel VBA 循环遍历多列范围的每一行 我一直在搜索的所有教程似乎都只提到在一维范围内工作 Dim a As Range b As Ran
  • 运行作业时的参数解释

    h host1 example com code Get WmiObject Class Win32 ComputerSystem Namespace root cimv2 ComputerName h timeout 5 jobstate
  • 在 Foreach 循环中递增变量并使用它-SSIS

    我有一个包 我正在使用 foreach 循环来循环数据库 我正在传递一个字符串 它会循环遍历所有数据库 到这里一切都很完美 我想要实现的是 对于它循环的每个数据库 它应该将变量增加 1 假设我必须循环遍历总共 5 个数据库 包级变量 myv
  • 等待 Firebase 检索数据[重复]

    这个问题在这里已经有答案了 我想构建一个返回a的方法childFirebase 中的值 我尝试做这样的事情 public String getMessage root child MessagesOnLaunch child Message
  • 通过RedBean批量插入mysql

    如何运行以下sqlRedBean INSERT INTO tbl name a b c VALUES 1 2 3 4 5 6 7 8 9 我应该使用循环还是RedBean支持批量插入 RedBeanPHP 的创建者在这里 RedBeanPH
  • 在 Adob​​e AIR for iOS 中获取唯一标识符(MAC 地址、UDID 等)

    我正在尝试在适用于 Android 和 iOS iPad 2 的 Adob e AIR 应用程序中获取用户设备网络适配器的 MAC 地址 在 Android 中它可以正常工作 但在 iOS 中却不能 这是我正在使用的代码 var vNetw
  • 从unittest.TestCase切换到tf.test.TestCase后的幻像测试

    以下代码 class BoxListOpsTest unittest TestCase Tests for common bounding box operations
  • Sparklyr:如何将列表列分解为 Spark 表中自己的列?

    我的问题与中的问题类似here 但我在实现答案时遇到问题 并且我无法在该线程中发表评论 因此 我有一个包含嵌套数据的大 CSV 文件 其中包含由空格分隔的 2 列 假设第一列是 Y 第二列是 X X 列本身也是一个逗号分隔值 21 66 2
  • OS X Yosemite 中 setenv 和 getenv 的奇怪行为

    当我设置环境变量时 launchctl setenv FOO test 我可以通过以下方式获取值 launchctl getenv FOO 这返回我 测试 但是一个简单的 echo FOO 不替换 结果为空 在同一航站楼以及新航站楼中 背景
  • 全局变量被炼金术打破了?

    看起来Adobe炼金术没有运行全局构造函数 这是一些简单的测试代码 include
  • 更改通过 JsonExtensionData 加载的数据的键名称[重复]

    这个问题在这里已经有答案了 我有一个由系统数据和用户条目混合而成的 JSON 如下所示 Properties Type A Name aaa lorem ipsum 7 1 Type B Name bbb sit amet XYZ Type
  • 根据文件扩展名验证文件

    我从 Java 队列中获取文件 它们可能具有以下格式 docx pdf doc xls xlsx txt rtf 阅读它们的扩展名后 我想验证它们是否确实是这些类型的文件 例如 我收到一个文件并检查其扩展名是否为 xls 之后 我想检查它是
  • 在打印机兼容的设备上下文中调用 Windows SelectObject 返回 NULL

    最近的 Windows 10 更新 可能也是神秘的 KB4577586 似乎已经产生了引起调用的效果选择对象使用位图句柄作为参数 在打印机兼容的设备上下文中执行时返回 NULL 相关行可以在这个中看到位图打印示例 它在早期的 Windows
  • 从字节码解析类名

    是否可以从类源代码形成的字节码中挖掘类名称 情况是这样的 我从某个地方远程获取类字节码 它来自哪里并不重要 为了使用类加载器有效地加载该类 我还需要类名 对吗 如果您只需要类名 那么您自己解析类文件的开头可能会更容易 而不是为此目的添加用于
  • R 语言:使用 ff 包计算“group by”或拆分时出现问题

    我对 R 几乎是新手 很抱歉如果我提出一些基本问题 但我找不到这个 简单 问题的解决方案 我有一个患者数据库 大数据库 2500 万行 14 列 每个 id 有几行 例如以下结构 id birth date treatment date t