R从短格式转换为长格式,以简短形式计数[重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R从短格式转换为长格式,以简短形式计数[重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
我有一个大表(约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
考虑到我的数据集的大小,我也想使用数据表(而不是数据帧)。我检查了reshape2
中的R
包关于长形和短形之间的转换但是我不清楚melt
函数是否允许我在上面的简短形式中计数。
关于如何使用R
和/或reshape2
以快速有效的方式在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
以上是关于R从短格式转换为长格式,以简短形式计数[重复]的主要内容,如果未能解决你的问题,请参考以下文章