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

玛丽B.

这是我之前问过的R问题的扩展:如何在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上保留正值(例如,ID组中event.timeline.ys> = 0的最后一行),而结果变量不是NA,但具有有效值(例如,对于ID == 800033,这将是第2行)。

此外,我想为每个参与者的event.timeline.ys上的第一行保持负值(即ID.group中event.timeline.ys <0的第一行),其中结果变量不是NA (例如,对于ID == 800033,这将是第4行)。

在event.timeline.ys <0时,在ID == 800076的特殊情况下,结果变量上没有任何非NA值的情况下,我仍然想保留event.timeline.ys <0的第一行。

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)。

提前谢谢了!

喷射

使用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'))

输出:

  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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在蜂巢中选择两个列中不同的蜂巢中的所有值

如何在Python Pandas中的两个值之间选择DataFrame中的行?

选择在同一列中具有两个不同值的行

如何在r中的两个变量中保持具有相同值的行?

Pandas DataFrame:在两个特定的列中获取具有相同值对的行

如何在python中具有相同键的两个不同字典中组合值

如何在两个属性的组合上比较两个列表,并选择第三个属性不匹配的行?

如何在r的列中的两个特定字符值之间标记所有行?

选择两个不同字段中具有共享值的行

如何在HSQL中为每个组选择列中具有最大值的行?

如何从Django中具有外键关系的两个模型中选择值

根据条件在两个不同的列组合上选择所有重复项

如何在SQL的两个表中获取具有不常见值的行?

如何在同一表上选择具有相同ID和名称的两个匹配记录

如何在R中的组中选择具有特定值的行

在dplyr组中,如何选择具有特定值与多个其他值中的一个组合的组

如何在R中组合来自不同数据帧的两个变量?

如何指示组中两个最高观察值(具有两个条件)?

如何从共享两个公共列的一组行中选择一列中具有最大值的熊猫行?

选择表中具有两个以上匹配组合键的所有行

基于 R 中列中的两个变量有条件地过滤组中的值

如何在 PostgreSQL 函数中组合两个选择?

如何在两个变量的组合上运行模型,并使用 tidyverse 为每个模型返回带有 p 值和 r 平方的数据框

在 r 闪亮中组合两个选择框值

选择两个日期之间 KDB 表中的所有行,但只取特定列中具有最大值的行

我想知道如何从两个不同的列中获取具有 2 个特定值的行

CASE WHEN PARTITION BY - 返回组中同一列中具有两个特定值的组的值

Python中具有相同值的两个变量

如何在R中组合两个函数图?