R加入大数据table与Vector并重复X次
R join large data table with Vector and repeat X times
我是 R 的新手,正在努力应对挑战...
我在 R 中有两个数据 tables,我想将它们连接在一起,但也多次重复其中一个 tables (table 2)。 tables 的格式如下。
Table 1 (7500+ rows by 665 Columns each row is unique)
num_Hrs Column A Column B .... Column XZ
3128_1 0 1 0
3128_2 1 0 1
3128_3 1 0 1
Table 2 (each row is unique)
ColumnData
12345
12346
12347
12348
我如何加入两个 table 并重复从 table 2 到 table 1 中的每一行的 25 行,这样我最终得到 7500 * 25 行追加列数据?我不想触及 Table 中的任何行 1 只添加 1 个新列,并重复 Table 中的值 2(重复行)。
TableMain
num_Hrs Column A Column B .... Column XZ ColumnData
3128_1 0 1 0 12345
3128_1 0 1 0 12346
3128_1 0 1 0 12347
3128_2 1 1 0 12345
3128_2 1 1 0 12346
3128_2 1 1 0 12347
然后我需要获取结果 TableMain 并在我有 table 3 的地方添加一个新列,该列具有与 num_Hrs in table 1 匹配的值,并且table 中的列数据 2.
Table 3
num_hrs ColumnData
3128_1 1234
3128_1 1235
3128_2 1234
如果这两个值与 TableMain 中的值匹配,则将 1 放入名为 "Found"
的新列中
num_Hrs Column A Column B .... Column XZ ColumnData Found
3128_1 0 1 0 12345 1
3128_1 0 1 0 12346 0
3128_1 0 1 0 12347 1
3128_2 1 1 0 12345 0
3128_2 1 1 0 12346 0
3128_2 1 1 0 12347 1
library(data.table)
dt1 = data.table(a = 1:4, b = 4:1)
# a b
#1: 1 4
#2: 2 3
#3: 3 2
#4: 4 1
dt2 = data.table(c = letters[1:4])
# c
#1: a
#2: b
#3: c
#4: d
dt2[, dt1[], by = c]
# c a b
# 1: a 1 4
# 2: a 2 3
# 3: a 3 2
# 4: a 4 1
# 5: b 1 4
# 6: b 2 3
# 7: b 3 2
# 8: b 4 1
# 9: c 1 4
#10: c 2 3
#11: c 3 2
#12: c 4 1
#13: d 1 4
#14: d 2 3
#15: d 3 2
#16: d 4 1
dt3 = data.table(a = c(2, 4, 4), c = c('c', 'a', 'd'))
# a c
#1: 2 c
#2: 4 a
#3: 4 d
dt2[, dt1[], by = c][, found := 0][dt3, found := 1, on = c('a', 'c')][]
# c a b found
# 1: a 1 4 0
# 2: a 2 3 0
# 3: a 3 2 0
# 4: a 4 1 1
# 5: b 1 4 0
# 6: b 2 3 0
# 7: b 3 2 0
# 8: b 4 1 0
# 9: c 1 4 0
#10: c 2 3 1
#11: c 3 2 0
#12: c 4 1 0
#13: d 1 4 0
#14: d 2 3 0
#15: d 3 2 0
#16: d 4 1 1
请注意 - data.table
中存在某种奇怪的错误,无法让我简单地执行 dt2[, dt1, by = c]
。
我是 R 的新手,正在努力应对挑战...
我在 R 中有两个数据 tables,我想将它们连接在一起,但也多次重复其中一个 tables (table 2)。 tables 的格式如下。
Table 1 (7500+ rows by 665 Columns each row is unique) num_Hrs Column A Column B .... Column XZ 3128_1 0 1 0 3128_2 1 0 1 3128_3 1 0 1 Table 2 (each row is unique) ColumnData 12345 12346 12347 12348
我如何加入两个 table 并重复从 table 2 到 table 1 中的每一行的 25 行,这样我最终得到 7500 * 25 行追加列数据?我不想触及 Table 中的任何行 1 只添加 1 个新列,并重复 Table 中的值 2(重复行)。
TableMain num_Hrs Column A Column B .... Column XZ ColumnData 3128_1 0 1 0 12345 3128_1 0 1 0 12346 3128_1 0 1 0 12347 3128_2 1 1 0 12345 3128_2 1 1 0 12346 3128_2 1 1 0 12347
然后我需要获取结果 TableMain 并在我有 table 3 的地方添加一个新列,该列具有与 num_Hrs in table 1 匹配的值,并且table 中的列数据 2.
Table 3 num_hrs ColumnData 3128_1 1234 3128_1 1235 3128_2 1234
如果这两个值与 TableMain 中的值匹配,则将 1 放入名为 "Found"
的新列中num_Hrs Column A Column B .... Column XZ ColumnData Found 3128_1 0 1 0 12345 1 3128_1 0 1 0 12346 0 3128_1 0 1 0 12347 1 3128_2 1 1 0 12345 0 3128_2 1 1 0 12346 0 3128_2 1 1 0 12347 1
library(data.table)
dt1 = data.table(a = 1:4, b = 4:1)
# a b
#1: 1 4
#2: 2 3
#3: 3 2
#4: 4 1
dt2 = data.table(c = letters[1:4])
# c
#1: a
#2: b
#3: c
#4: d
dt2[, dt1[], by = c]
# c a b
# 1: a 1 4
# 2: a 2 3
# 3: a 3 2
# 4: a 4 1
# 5: b 1 4
# 6: b 2 3
# 7: b 3 2
# 8: b 4 1
# 9: c 1 4
#10: c 2 3
#11: c 3 2
#12: c 4 1
#13: d 1 4
#14: d 2 3
#15: d 3 2
#16: d 4 1
dt3 = data.table(a = c(2, 4, 4), c = c('c', 'a', 'd'))
# a c
#1: 2 c
#2: 4 a
#3: 4 d
dt2[, dt1[], by = c][, found := 0][dt3, found := 1, on = c('a', 'c')][]
# c a b found
# 1: a 1 4 0
# 2: a 2 3 0
# 3: a 3 2 0
# 4: a 4 1 1
# 5: b 1 4 0
# 6: b 2 3 0
# 7: b 3 2 0
# 8: b 4 1 0
# 9: c 1 4 0
#10: c 2 3 1
#11: c 3 2 0
#12: c 4 1 0
#13: d 1 4 0
#14: d 2 3 0
#15: d 3 2 0
#16: d 4 1 1
请注意 - data.table
中存在某种奇怪的错误,无法让我简单地执行 dt2[, dt1, by = c]
。