如何在 R 组内的两个变量的组合上选择具有特定值的行

2024-05-07

这是我之前提出的 R 问题的扩展:如何在R中选择组内具有特定值的行 https://stackoverflow.com/questions/55853841/how-to-select-rows-with-certain-values-within-a-group-in-r

我在这个问题上得到了很大的帮助,但现在变得有点复杂了,我希望收到如何处理这个问题的建议。

我的数据如下所示:

dd <- read.table(text="
    event.timeline.ys     ID     year    group  outcome
                 1                   2     800033 2008    A  3
                 2                   1     800033 2009    A  3
                 3                   0     800033 2010    A  NA   
                 4                  -1     800033 2011    A  2  
                 5                  -2     800033 2012    A  1  
                 15                  0     800076 2008    B  2
                 16                 -1     800076 2009    B  NA
                 17                  5     800100 2014    C  4     
                 18                  4     800100 2015    C  4  
                 19                  2     800100 2017    C  4  
                 20                  1     800100 2018    C  3   
                 30                  0     800125 2008    A  2   
                 31                 -1     800125 2009    A  1   
                 32                 -2     800125 2010    A  NA
                 33                  2     800031 2008    A  3
                 34                  1     800031 2009    A  3
                 35                  0     800031 2010    A  NA   
                 36                 -1     800031 2011    A  NA  
                 37                 -2     800031 2012    A  1", header=TRUE)

我只想选择组(ID)中的特殊行。应根据以下过程选择这些行:

如果可能的话,我想为每个参与者保留 event.timeline.ys 上具有正值的最后一行(即,event.timeline.ys >= 0 的 ID 组中的最后一行),其中结果变量不是不适用,但具有有效值(例如,对于 ID == 800033,这将是第 2 行)。

此外,我想为每个参与者保留 event.timeline.ys 上具有负值的第一行(即 ID 组中 event.timeline.ys

在 ID == 800076 的特殊情况下,当 event.timeline.ys

ID = 800100 的人在 event.timeline.ys 上没有任何负值。在这种情况下,我想只保留 event.timeline.ys >= 0 的最后一行。

所有其他行都应删除。最终的数据框如下所示:

      event.timeline.ys         ID     year    group  outcome
2                     1     800033     2009    A            3
4                    -1     800033     2011    A            2  
15                    0     800076     2008    B            2
16                   -1     800076     2009    B           NA
20                    1     800100     2018    C            3   
30                    0     800125     2008    A            2   
31                   -1     800125     2009    A            1
34                    1     800031     2009    A            3
37                   -2     800031     2012    A            1

我非常感谢关于如何解决这个问题的建议。我已经尝试过这个:

dd %>% 
  group_by(ID) %>% 
  filter(row_number() == last(which(event.timeline.ys >= 0 & outcome >= 0)) | 
           row_number() == first(which(event.timeline.ys < 0 & outcome >= 0)))

然而,我随后丢失了第 16 行(ID == 800076),这是不幸的。

提前谢谢了!


Using dplyr:

dd %>%
group_by(ID, event.timeline.ys>=0) %>%
arrange(ID, event.timeline.ys>=0, abs(event.timeline.ys)) %>%
filter(!is.na(outcome) | n()==1) %>%
filter(row_number()==1) %>%
ungroup() %>%
select(-one_of('event.timeline.ys >= 0'))

Output:

  event.timeline.ys     ID  year group outcome
              <int>  <int> <int> <fct>   <int>
1                -1 800033  2011 A           2
2                 1 800033  2009 A           3
3                -1 800076  2009 B          NA
4                 0 800076  2008 B           2
5                 1 800100  2018 C           3
6                -1 800125  2009 A           1
7                 0 800125  2008 A           2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 R 组内的两个变量的组合上选择具有特定值的行 的相关文章

随机推荐

  • CORS 与 Amazon S3 和 Cloudfront

    我有一个托管在 Heroku 上的 Rails 应用程序 它使用 CloudFront 以及托管在 S3 上的资产 它完美地显示了资产 尽管需要一些努力 我的 Cloudfront 设置 Forward Headers Whitelist
  • 为什么 C# 中没有“fieldof”或“methodof”运算符? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 它们可以如下使用 FieldInfo field fieldof string Empty MethodInfo method1 methodo
  • Spark 按列重新分区,每列动态分区数

    如何根据列中的项目数对 DataFrame 进行分区 假设我们有一个包含 100 人的 DataFrame 列是first name and country 我们希望为一个国家 地区的每 10 个人创建一个分区 如果我们的数据集包含 80
  • Android快速查找网络上所有本地设备

    我正在制作一个 Android 应用程序 需要能够查看本地网络设备 名称或 IP 目前我可以扫描网络并找到设备的本地IP 然而 由于时间太长 用户在搜索网络时会看到黑屏加载几分钟 这是我当前正在使用的代码 private ArrayList
  • WCF - 进行多次调用时随机客户端超时

    我有一个WPF客户端通过以下方式请求数据WCF服务托管于IIS 7 服务方法调用存储过程 SQL 2012 using EF检索一些数据 由于需要加载大量数据 因此客户端会多次调用服务方法 以 分解 数据加载并避免大量负载和超时 我们使用生
  • 为什么recycleview数据无法与服务器端数据库数据同步

    我正在使用rest api向我在android中的应用程序提供数据 对于数据库 我正在使用phpmyadmin并在本地主机中执行此操作 一切顺利 但是当我在数据库中添加新数据时 我的recycleview无法与数据库中的最新数据同步 因此当
  • Android 上的 Skobbler 地图显示黑屏

    我正在使用 Skobbler SDK 2 3 0 针对 Lollipop 在 Nexus 5 和 Galaxy S4 上进行测试 在 Android Studio 1 0 2 上构建 我有一个带有导航抽屉和片段的 MainActivity
  • Zend url:获取参数始终保留在 url 中

    我在使用带有 get 参数的 Zend url 帮助器时遇到一些问题 在一个视图中 我有分页 它在 get 中发送额外的参数 所以在 url 中 所以没关系 但这是不行的 即使我更改页面 参数也始终保留在 url 中 事实上 zend ur
  • 将 xml 传递给 jquery 脚本时出现问题

    我正在尝试使用 jsp 中的 bufferedReader 从本地路径读取 xml 并尝试将 xml 传递给 jquery 脚本 如下所示
  • 使用 Antlr4 解析任意分隔符

    我尝试在 Antlr4 中创建一个接受正则表达式的语法由任意字符分隔 与 Perl 中的类似 我怎样才能实现这个目标 需要明确的是 我的问题不是正则表达式本身 实际上我不在 Antlr 中处理 而是在访问者中处理 而是分隔符 我可以轻松地为
  • 将列表沿元素拆分为子列表

    我有这个清单 List
  • 内存数据库不保存数据

    我有一个简单的网络应用程序 在客户端有 Angular 在服务器端有 ASP NET Core Web API 我使用内存数据库 services AddDbContext
  • 在ironpython中使用ipython需要什么?

    我很想使用 IronPython 来探索 net 运行时和库 但我怀念来自 CPython 的经历IPython http ipython scipy org moin 的补全和快捷键 上次我检查过 IPython 由于缺少 sys get
  • ML.NET 无法在 uwp 上运行

    我在 Visual Studio 2017 中构建了一个 UWP 应用程序 并在解决方案中添加了一个类库来运行 ML NET 但每次运行该应用程序时都会出现异常 PlatformNotSupportedException 此平台不支持检索有
  • 反规范化 XSD

    我需要对 XML 模式进行非规范化 以便为将创建符合该模式的文档的人员生成文档 用户不了解 XSD 并且很可能永远不会学习 我见过的工具能够为其他 XSD 开发人员生成文档 但我的用户对如何构建架构的细节不感兴趣 他们只想知道他们可以做什么
  • 更改称为通知的 applescript 的图标

    有了 OSX Mavericks 我们现在可以带有 applescript 的通知 http www macosautomation com mavericks notifications index html很容易 然而 似乎没有一种方法
  • 如何将测试文件夹添加到旧的 Android Studio 项目

    我在将用于测试的项目结构添加到 Android Studio 中的旧 Android 项目中时遇到一些问题 当您在 Android Studio 中创建新项目时 您将获得从一开始就创建的用于测试的目录 src test java for u
  • 最后一项具有不同类型的元组(首先从剩余元素开始)

    我有一个类型Foo那是一个Array可以包含任意数量的Bar元素 带有可选的最后一个Qux元素 以下是一些有效数据的示例 bar qux bar qux bar bar bar bar bar bar bar bar qux 无效数据示例
  • 如何绘制多面直方图(不是条形图)以及相对于每个面的百分比?

    虽然有几篇关于如何在条形图的每个方面使用缩放百分比的帖子 但我没有看到任何帖子显示如何在直方图中执行此操作 可以这样做吗 这是我研究过的两篇文章 所以帖子1 使用 ggplot2 获取反映各个方面的百分比比例 https stackover
  • 如何在 R 组内的两个变量的组合上选择具有特定值的行

    这是我之前提出的 R 问题的扩展 如何在R中选择组内具有特定值的行 https stackoverflow com questions 55853841 how to select rows with certain values with