使用来自相同键索引的值填充空白字段

Fill in Blank Fields With a Value From Same Key Index

我有一组数据(10 列,1000 行),这些数据由一个或多个这些行可以共享的 ID 号索引。举一个小例子来说明我的观点,考虑这个 table:

ID       Name      Location
5014     John     
5014     Kate     California
5014     Jim
5014     Ryan     California
5018     Pete     
5018     Pat      Indiana
5019     Jeff     Arizona
5020     Chris    Kentucky
5020     Mike
5021     Will     Indiana

我需要所有条目都在“位置”字段中包含一些内容,而我在尝试这样做时遇到了麻烦。

注意事项:

  1. 每个唯一 ID 号至少有一行填充了位置字段。
  2. 如果两行具有相同的ID号,则它们具有相同的位置。
  3. 两个不同的身份证号码可以有相同的位置。
  4. 身份证号不一定是连续的,也不一定是全数字的。它们的排列对我来说并不重要,因为任何相关的行都共享相同的 ID 号。

有什么解决方案吗?我目前在 data.table 包中使用 R,但我对它比较陌生。

我们可以将'data.frame'转换为'data.table'(setDT(df1)),按'ID'分组,得到Location中不属于[=的元素14=](Location[Location!=''][1L])。假设,如果每组有多个元素不是 '',则 [1L] 选择第一个非空白元素,并将输出分配 (:=) 给 Location

library(data.table)
setDT(df1)[, Location := Location[Location != ''][1L], by = ID][]
#     ID  Name   Location
# 1: 5014  John California
# 2: 5014  Kate California
# 3: 5014   Jim California
# 4: 5014  Ryan California
# 5: 5018  Pete    Indiana
# 6: 5018   Pat    Indiana
# 7: 5019  Jeff    Arizona
# 8: 5020 Chris   Kentucky
# 9: 5020  Mike   Kentucky
#10: 5021  Will    Indiana

或者我们可以按照@Frank

的建议使用setdiff
 setDT(df1)[, Location:= setdiff(Location,'')[1L], by = ID][]