如何根据ID向R中的列添加值?
How to add values to a column in R based on ID?
我有两个这样的数据表:
df1 <- data.table(ID = 1:10,
text = c("a", NA, NA, "b", NA, "a", "a", NA, "c", NA))
df2 <- data.table(ID = c(2,3,8),
text = c("a", "b", "a"))
我想根据 ID 使用 df2 中的值填充 df1 中的文本列。请注意,并非每个 ID 在 df1 或 df2 中的文本列中都有值。
我希望我的结果如下所示:
ID text
1: 1 a
2: 2 a
3: 3 b
4: 4 b
5: 5 <NA>
6: 6 a
7: 7 a
8: 8 a
9: 9 c
10: 10 <NA>
如果可能,应从 df2 中获取值,否则 df1 中的列文本应保留为空。
非常感谢您的帮助!
df1[is.na(text), text := df2[.SD, on = 'ID', text]]
使用 base R data.frame
你 可以 实现类似的逻辑:
i_tm <- is.na(df1$text) # text missing at
df1[i_tm, 'text'] <- df2[match(df1[i_tm, 'ID'], df2$ID), 'text']
我以前从未使用过 data.table
,但这似乎可以解决问题。
全连接然后合并
df3 <- merge(df1, df2, by="ID", all=T)
df3[, text := fcoalesce(text.x, text.y)]
df3
我们可以使用
df1[df2, text := i.text, on = .(ID)]
-输出
> df1
ID text
1: 1 a
2: 2 a
3: 3 b
4: 4 b
5: 5 <NA>
6: 6 a
7: 7 a
8: 8 a
9: 9 c
10: 10 <NA>
我有两个这样的数据表:
df1 <- data.table(ID = 1:10,
text = c("a", NA, NA, "b", NA, "a", "a", NA, "c", NA))
df2 <- data.table(ID = c(2,3,8),
text = c("a", "b", "a"))
我想根据 ID 使用 df2 中的值填充 df1 中的文本列。请注意,并非每个 ID 在 df1 或 df2 中的文本列中都有值。
我希望我的结果如下所示:
ID text
1: 1 a
2: 2 a
3: 3 b
4: 4 b
5: 5 <NA>
6: 6 a
7: 7 a
8: 8 a
9: 9 c
10: 10 <NA>
如果可能,应从 df2 中获取值,否则 df1 中的列文本应保留为空。
非常感谢您的帮助!
df1[is.na(text), text := df2[.SD, on = 'ID', text]]
使用 base R data.frame
你 可以 实现类似的逻辑:
i_tm <- is.na(df1$text) # text missing at
df1[i_tm, 'text'] <- df2[match(df1[i_tm, 'ID'], df2$ID), 'text']
我以前从未使用过 data.table
,但这似乎可以解决问题。
全连接然后合并
df3 <- merge(df1, df2, by="ID", all=T)
df3[, text := fcoalesce(text.x, text.y)]
df3
我们可以使用
df1[df2, text := i.text, on = .(ID)]
-输出
> df1
ID text
1: 1 a
2: 2 a
3: 3 b
4: 4 b
5: 5 <NA>
6: 6 a
7: 7 a
8: 8 a
9: 9 c
10: 10 <NA>