r - 定义要在 data.table 中的 ID 重复项中删除的变量
问题描述
我有以下数据集
DT <- data.table(
id = c(1,2,3,4,4,5,6,6,7),
date = c("2013-11-22","2017-01-24","2020-02-10","2011-01-03"
,"2011-01-03","2012-04-03","2010-09-03","2010-09-03"
,"2010-05-03"),
status = c("Never","Current","Former",NA,"Former"
, NA,"Never","Former","Current")
)
我想创建一个独特的id
并删除重复项。
- 应该保留的
id
行取决于status
. - 如果 staus 有
NA
和 nonNA
,我想保持 nonNA
观察。 - 如果 status 有
Former
andNever
,我想继续Former
观察。
下面的示例输出:
id date status
1: 1 2013-11-22 Never
2: 2 2017-01-24 Current
3: 3 2020-02-10 Former
4: 4 2011-01-03 Former
5: 5 2012-04-03 <NA>
6: 6 2010-09-03 Former
7: 7 2010-05-03 Current
原始数据集有更多的行和列,一个data.table
函数会节省时间。还有一些id
出现不止一次。我之前尝试过以保持id
最新日期。但是,我有太多的“NA”在更早的日期有另一个状态条目。
我如何定义应该保留的id
相同status
?
解决方案
我们可以创建一个factor
withstatus
指定levels
,将其order
与 'id' 一起使用并unique
通过 'id'获取
library(data.table)
unique(DT[order(id, ordered(status, c("Former", "Current", "Never")))], by = 'id')
推荐阅读
- php - 如何在foreach中将字符串组合成单个字符串?php
- python - TypeError:从扫描的 PDF 中提取文本时,“type”类型的参数不可迭代
- python - manage.py createsuperuser 不使用自定义用户模型
- python - 如何在以下列格式输出的列表中插入列表:[a, b, c] => [ [c], [b, c], [a, b, c]]
- javascript - Javascript:在鼠标点击时显示纬度和经度
- java - Citrus 框架:我收到 NoSuchBeanDefinitionException 来测试 Christopher 提供的 JMS 示例
- c# - 如何将动态 ViewModel 列表类型映射到 DTO
- java - Java-使用 if/else 和 switch 语句将名称与名称列表进行比较
- javascript - 删除运算符不适用于原型属性
- flash - Adobe Flash 输出不显示文本