R 从短格式转换为长格式,并以短格式计数
R converting from short form to long form with counts in the short form
我有一个大的 table(~100M 行和 28 列),格式如下:
ID A B C
1 2 0 1
2 0 1 0
3 0 1 2
4 1 0 0
除了 ID(唯一的)之外的列给出了每种类型(即 A、B、C)的计数。我想将其转换为下面的长格式。
ID Type
1 A
1 A
1 C
2 B
3 B
3 C
3 C
4 A
鉴于我的数据集的大小,我还想使用数据 table(而不是数据框)。我在 R
中检查了 reshape2
包关于长格式和短格式之间的转换,但是我不清楚 melt
函数是否允许我像上面那样以短格式进行计数。
关于如何在 R
中使用 reshape2
and/or data.table
?
快速有效地转换它的任何建议
更新
您可以尝试以下方法:
DT[, rep(names(.SD), .SD), by = ID]
# ID V1
# 1: 1 A
# 2: 1 A
# 3: 1 C
# 4: 2 B
# 5: 3 B
# 6: 3 C
# 7: 3 C
# 8: 4 A
也保留您想要的顺序...
您可以尝试以下方法。我从来没有用过 expandRows
来计算大约 3 亿行,但它基本上是 rep
,所以应该不会慢。
这使用了我的 "splitstackshape" 包中的 melt
+ expandRows
。它与 data.frame
s 或 data.table
s 一起使用,因此您不妨使用 data.table
来更快地融化....
library(reshape2)
library(splitstackshape)
expandRows(melt(mydf, id.vars = "ID"), "value")
# The following rows have been dropped from the input:
#
# 2, 3, 5, 8, 10, 12
#
# ID variable
# 1 1 A
# 1.1 1 A
# 4 4 A
# 6 2 B
# 7 3 B
# 9 1 C
# 11 3 C
# 11.1 3 C
我有一个大的 table(~100M 行和 28 列),格式如下:
ID A B C
1 2 0 1
2 0 1 0
3 0 1 2
4 1 0 0
除了 ID(唯一的)之外的列给出了每种类型(即 A、B、C)的计数。我想将其转换为下面的长格式。
ID Type
1 A
1 A
1 C
2 B
3 B
3 C
3 C
4 A
鉴于我的数据集的大小,我还想使用数据 table(而不是数据框)。我在 R
中检查了 reshape2
包关于长格式和短格式之间的转换,但是我不清楚 melt
函数是否允许我像上面那样以短格式进行计数。
关于如何在 R
中使用 reshape2
and/or data.table
?
更新
您可以尝试以下方法:
DT[, rep(names(.SD), .SD), by = ID]
# ID V1
# 1: 1 A
# 2: 1 A
# 3: 1 C
# 4: 2 B
# 5: 3 B
# 6: 3 C
# 7: 3 C
# 8: 4 A
也保留您想要的顺序...
您可以尝试以下方法。我从来没有用过 expandRows
来计算大约 3 亿行,但它基本上是 rep
,所以应该不会慢。
这使用了我的 "splitstackshape" 包中的 melt
+ expandRows
。它与 data.frame
s 或 data.table
s 一起使用,因此您不妨使用 data.table
来更快地融化....
library(reshape2)
library(splitstackshape)
expandRows(melt(mydf, id.vars = "ID"), "value")
# The following rows have been dropped from the input:
#
# 2, 3, 5, 8, 10, 12
#
# ID variable
# 1 1 A
# 1.1 1 A
# 4 4 A
# 6 2 B
# 7 3 B
# 9 1 C
# 11 3 C
# 11.1 3 C