我有一组数据(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
我需要所有条目在“位置”字段中包含某些内容,并且我有一段时间尝试这样做。
注意事项:
任何解决方案的想法?我目前正在使用带有data.table
套餐的R,但我相对较新。
答案 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