我在数据表中有一个如下所示的数据:
Category Country
A India
B Canada
C Ireland
A Ireland
C Canada
A India
A Canada
我想对其进行转换,以便如果某个国家/地区生成相同的2个类别,则结果数据表中会有一行,其中包含国家/地区的名称和两个类别的名称。所以,上面的输出应该是这样的:
Value 1 Value 2 Country
A A India
B C Canada
B A Canada
C A Canada
C A Ireland
目前我正在将其转换为矩阵并计划将其转换为长格式:
M=(as.matrix( table(df) ) )
但这只会给我一个我想要的输出的摘要,而不是为每个 Category1,Category2,Country 值获取单独的行,我将得到 Category1,Category2,Countof(Country )价值。
我是data.table的新手并且对它的速度印象深刻。我特别想知道是否有一种有效的data.table方式。
答案 0 :(得分:2)
你可以做到
DF[,
CJ(Category, Category, unique=TRUE)[if (.N == 1L) TRUE else V1 > V2][order(-V1, -V2)]
, by=Country]
Country V1 V2
1: India A A
2: Canada C B
3: Canada C A
4: Canada B A
5: Ireland C A
工作原理:尝试分步运行,第二个arg为:
CJ(Category, Category, unique=TRUE)
CJ(Category, Category, unique=TRUE)[if (.N == 1L) TRUE else V1 > V2]
CJ(Category, Category, unique=TRUE)[if (.N == 1L) TRUE else V1 > V2][order(-V1, -V2)]
并阅读?CJ
。
评论。一般来说,你在这里要求的是R和data.table中的一个坏主意,除非它只是为了浏览结果。如果您需要进行进一步的分析,那么使用长格式而非宽格式的数据可能会更方便。