【发布时间】:2019-10-30 13:32:43
【问题描述】:
我有一个数据框,其中包含两个我正在尝试纠正的问题。这是一个玩具示例。
require(data.table)
tempdt <- data.table(ID1=rep(1:6,each=2),ID2=rep(letters[1:2],6),name=c('john','john',NA,'mike','steve',NA,'bob',NA,NA,'henry','joe','frank'))
ID1 ID2 name
1: 1 a john
2: 1 b john
3: 2 a <NA>
4: 2 b mike
5: 3 a steve
6: 3 b <NA>
7: 4 a bob
8: 4 b <NA>
9: 5 a <NA>
10: 5 b henry
11: 6 a joe
12: 6 b frank
有 2 个顺序分组变量(ID1 作为一级序列,ID2 作为 ID1 中的二级序列)和一个名称分配。有时名称丢失,我需要根据该 ID1 中分配的内容填写 在其他时候,我可能有 2 个(或更多)相同 ID1 的不同名称,但应该只有一个。在 ID1 中按 ID2 顺序排在第一位的名称应该是所有 ID1 的指定名称
最终名称字段应为c('john','john','mike','mike','steve','steve','bob','bob','henry','henry','joe','joe')
我可以通过根据两个顺序变量对数据框(表)排序,然后在 ID1 上执行 for 循环并进行更正来解决此问题,但似乎应该有一种更清洁更有效的方法 沿 ID1 排序,比较 ID1 内 ID2 的序列,并进行修正避免循环。
有什么想法吗?我将它作为数据表使用,因为我通常使用它们,但这不是必需的。
会
【问题讨论】:
-
预期的输出不应该是最后的观察结果吗?
-
不,它是 ID1 中 ID2 序列中最先出现的内容
标签: r data.table na updating