使用相同键索引的值填写空白字段

时间:2015-03-25 11:55:45

标签: r data.table

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

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. 两个不同的ID号可以具有相同的位置。
  4. ID号不一定是连续的,也不一定是完全数字的。它们的安排对我来说并不重要,因为任何相关的行都拥有相同的ID号。
  5. 任何解决方案的想法?我目前正在使用带有data.table套餐的R,但我相对较新。

1 个答案:

答案 0 :(得分:4)

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

Location

或者我们可以按照@Frank

的建议使用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
setdiff