从R中的数据表创建关联数据

时间:2016-07-11 09:24:26

标签: r data.table

我在数据表中有一个如下所示的数据:

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方式。

1 个答案:

答案 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中的一个坏主意,除非它只是为了浏览结果。如果您需要进行进一步的分析,那么使用长格式而非宽格式的数据可能会更方便。