基于“附近”行值聚合

2024-01-11

我有一个非常混乱的数据框(网络抓取),不幸的是其中有许多双重甚至三重条目。大多数数据框如下所示:

> df1<-data.frame(var1=c("a","a","b","b","c","c","d","d"),var2=c("right.a",NA,"right.b",NA,"right.c",NA,"right.d",NA),var3=c("correct.a","correct.a","correct.b","correct.b","correct.c","correct.c","correct.d","correct.d"))
> df1
  var1    var2      var3
1    a right.a correct.a
2    a    <NA> correct.a
3    b right.b correct.b
4    b    <NA> correct.b
5    c right.c correct.c
6    c    <NA> correct.c
7    d right.d correct.d
8    d    <NA> correct.d

“var1”是我需要用来聚合的 ID 变量。我的目标是拥有一个如下所示的数据框:

  var1    var2      var3
1    a right.a correct.a
2    b right.b correct.b
3    c right.c correct.c
4    d right.d correct.d

然而,主要问题是,并不是整个数据框看起来像这样。事实上,我还有其他类似这样的部分:

> df2<-data.frame(var1=c("e","e","e","f","f","g","g","g"),var2=c(NA,NA,"right.e",NA,NA,NA,"right.g",NA),var3=c("correct.e","correct.e",NA,"correct.f",NA,"correct.g","correct.g",NA))
> df2
  var1    var2      var3
1    e    <NA> correct.e
2    e    <NA> correct.e
3    e right.e      <NA>
4    f    <NA> correct.f
5    f    <NA>      <NA>
6    g    <NA> correct.g
7    g right.g   wrong.g
8    g    <NA>      <NA>

以及其他变化。最后,每个 ID 都应该有一行包含正确且正确的 var2 和 var3。此时,我迷路了:我的 var1 是不独特。但是,我知道“属于”在一起的重复 ID 会分组在数据框中(如我的示例中所示);例如第 4102 行和第 4103 行中可能还有另一个“a”。

我认为正确的方法是使用以 var1 作为 ID 的聚合,但另外告诉 R 这样做时聚合应该只检查 var1 的 +-2 行。有什么想法如何编码吗?

Thanks!


这是一个使用的方法data.table

library(data.table)

setDT(df1)[, .(var2[!is.na(var2)][1], var3[!is.na(var3)][1]), by=var1]
   var1      V1        V2
1:    a right.a correct.a
2:    b right.b correct.b
3:    c right.c correct.c
4:    d right.d correct.d

and

setDT(df2)[, .(var2[!is.na(var2)][1], var3[!is.na(var3)][1]), by=var1]
   var1      V1        V2
1:    e right.e correct.e
2:    f      NA correct.f
3:    g right.g correct.g

这个想法在var2[!is.na(var2)][1]例如,从 var2 中获取第一个非缺失值。如果所有值均缺失,则返回 NA。该操作由 var1 对两个变量执行。

如果你有两个以上的变量,你可以切换到lapply。例如以下。

df1[, lapply(.SD, function(i) i[!is.na(i)][1]), by=var1]
   var1    var2      var3
1:    a right.a correct.a
2:    b right.b correct.b
3:    c right.c correct.c
4:    d right.d correct.d

如果多个 var1 具有有效值,且由非缺失 var2 指示,则您可以通过连接达到预期结果。

评论中的数据,

df1<-data.frame(var1=c("a","a","b","b","c","c","d","d","a","a"),
                var2=c("right.a",NA,"right.b",NA,"right.c",NA,"right.d",NA,"right.a1",NA),
                var3=c("correct.a","correct.a","correct.b","correct.b","correct.c","correct.c","correct.d","correct.d","correct.a1","correct.a1"))

然后,根据这些数据,

setDT(df1)[df1[, .(var2=var2[!is.na(var2)]), by=var1], on=.(var1, var2)]
   var1     var2       var3
1:    a  right.a  correct.a
2:    a right.a1 correct.a1
3:    b  right.b  correct.b
4:    c  right.c  correct.c
5:    d  right.d  correct.d

在这里,var1 的所有非缺失 var2 观测值都被合并到原始数据集中。

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

基于“附近”行值聚合 的相关文章

随机推荐

  • NSPopupButton 中带有绑定的分隔符项

    的内容NSPopupButton绑定到一个NSArray字符串 我们如何通过绑定插入分隔符项目 The 字符串 就像在过去 经典时代一样 不起作用 即字面上显示为 菜单项 是否有任何带有标准 Cocoa 类和绑定的开箱即用的解决方案 这应该
  • CATextLayer旋转?

    这应该确实有效 但不是 CATextLayer textLayer CATextLayer layer textLayer string text textLayer setValue NSNumber numberWithDouble M
  • 如何在 Pygame 中插入滑块?

    我目前正在 Python 上进行物理模拟 使用 Pygame 模拟室内的气体云 我的问题是我无法在代码中插入工作滑块来更改参数的值 我有一个运行模拟的 运行时 循环 当我想在其中插入工作滑块时 模拟就会停止 我无法让模拟和滑块同时工作 下面
  • 为什么正则语言的补语仍然是正则语言?

    根据我的教科书 只要L1是正则语言 L1 A L1的补集就是正则语言 A 不是还包括上下文无关语言 上下文相关语言和递归可枚举语言吗 A L1 也将包括所有这些 不是吗 那怎么可能有规律呢 在有限状态机的表示下 我理解为什么补码仍然是常规语
  • 向静态 Azure 网站添加身份验证

    我们有一个 Azure 网站 托管一个静态站点 仅一些 HTML CSS Javascript 然后通过 AJAX 调用与我们的 Azure 移动服务进行通信 我们想向该站点添加一些非常简单的身份验证 只需静态用户名 密码就足够了 请推荐最
  • 如何在 scipy.optimize 中使用 fmin_cg 获得正确的尺寸

    我一直在尝试使用 fmin cg 来最小化逻辑回归的成本函数 xopt fmin cg costFn fprime grad x0 initial theta args X y m maxiter 400 disp True full ou
  • Java foreach 对原语的迭代顺序是否精确定义?

    示例代码 int a new int 0 1 2 3 int result 0 for int i a result i 循环是否保证迭代a 0 a 1 a 2 a 3 以该顺序 我坚信答案是肯定的 但是这一页 http java sun
  • JLabel 仅显示 initComponents() 是否被删除

    MainFrame java JFrame public MainFrame initComponents Letters pl new Letters this this setContentPane pl this setTitle P
  • 无法使用反应钩子读取未定义的属性“映射”

    我试图使用 fortnite api 来显示当前的物品商店 但我收到了如标题所示的错误 当我控制台日志结果时 它显示一个数组 但我无法映射它 为什么 import React useState useEffect from react im
  • 在互操作 C# 期间延迟 Excel 计算

    我必须从 C 程序将数百个单元格输入到 Excel 工作表中 每次我设置一个单元格或一个范围时 Excel都会缓慢响应 大概是在我添加的每个输入之间更新各种输出 有没有办法禁用我的 C 程序的计算 并在完成设置单元格并准备好读取输出后重新启
  • LINQ 有条件添加联接

    我有一个 LINQ 查询 我试图从 2 个表返回数据 但我加入的表是有条件的 这就是我想做的 if teamType A var query from foo in context People join foo2 in context P
  • 在运行时请求管理员权限

    如何在运行时请求管理员权限 以便提示用户允许或禁止 如果您希望它响应按钮 例如 像任务管理器中的 显示所有用户的进程 您必须使用以下方法重新启动您的应用程序 ShellExecute 0 L runas exepath 0 0 SW SHO
  • 如何使用 Visual Studio 为 .net Framework 4.7.2 项目创建 SDK 样式项目?

    我运行的是最新版本的VS2019 16 6 1 然而 Windows 类库的新项目向导仍然创建旧样式的项目 我想用这个方法研究这个问题 https stackoverflow com questions 62251125 target v4
  • 如何使我的本地主机可通过互联网访问

    我在本地计算机上的 JBoss 上托管了一个应用程序 我也可以通过 localhost 或通过我的 IP 访问 现在我希望其他用户可以通过我的 IP 通过互联网访问同一个应用程序 您能让我知道如何配置 JBoss 来处理这些请求吗 http
  • 无法从 WinApi 箱调用 CryptDecrypt,因为它找不到模块

    In the 文档 https docs rs winapi x86 64 pc windows msvc winapi um wincrypt fn CryptDecrypt html它说该函数位于winapi um wincrypt C
  • 如何将 tr 附加到表格顶部

    我如何将新的 tr 附加到表格顶部而不是其他 tr 下 Example table width 100 tr td something td td else here td tr tr td something2 td td else he
  • scala中基于相邻元素之间差异的拆分列表

    我们如何根据相邻元素之间的差异在 scala 中拆分列表 例如 给定 List 1 3 6 10 12 14 和差值 3 该函数将返回 List List 1 3 List 6 List 10 12 14 我们可以使用foldLeft 来做
  • 如何为 Android 中单击的图像按钮制作边框?

    我正在使用 Imagebuttons 在我的 android 项目中显示一些图标
  • 值不能为 null 或为空。\r\n参数名称: name

    当我进入 cshtml 页面时出现此错误 System Web Mvc dll 中发生 System ArgumentException 类型的异常 但未在用户代码中处理 在我的 cshtml 代码中 div class form grou
  • 基于“附近”行值聚合

    我有一个非常混乱的数据框 网络抓取 不幸的是其中有许多双重甚至三重条目 大多数数据框如下所示 gt df1 lt data frame var1 c a a b b c c d d var2 c right a NA right b NA