R:聚合相似的列并使用列名作为R中的值

时间:2012-04-02 15:39:51

标签: r dataframe aggregate

我有一个看起来像这样的数据框

ID  FactorA FactorB Industry1 Industry2  Curr1   Curr2
1   1.121   0.121   1         0          1       0
2   1.52    0.114   0         1          1       0

因子A和因子B是实数,并且它们都具有值。但是Industry1industry2(货币1和货币2相同)是二进制的,即只有其中一个可以value=1

由于我想缩小数据用于存储目的,因为我有80种行业类型和100种货币类型,并且只有其中一种具有值,我想像这样存储它们

ID  FactorA FactorB Industry    Curr
1   1.121   0.121   Industry1   Curr1   
2   1.52    0.114   Industry2   Curr1

基本上我想使用值为1的列名并加入type=IndustryCurr等所有字符串。我还有另一个表将每个列名链接到它的类型

ColName     Type
FactorA     Factor
FactorB     Factor
Industry1   Industry
Industry2   Industry
Curr1       Curr
Curr2       Curr

2 个答案:

答案 0 :(得分:3)

您可以使用melt包中的reshape2功能折叠列。如评论中所述,提供一个示例 - 它使生活更轻松:

dd = data.frame(ID = 1:2, factorA = c(1.121, 1.52),
  factorB = c(0.12, 0.114), Ind1 = 1:0, Ind2= 0:1,
  Curr1 = 1, Curr2=0)

首先加载包:

library(reshape2)

接下来melt列,但保护前三个:

dd1 = melt(dd, id=1:3)

查看融合帮助文件以获取更多信息。然后只需要一些子集来获得你想要的东西:

dd2 = dd1[dd1$value == 1,]

您可能希望删除最后一列。

答案 1 :(得分:0)

您可以使用ifelse创建新列:

mydata$Industry = ifelse(mydata$Industry1, "Industry1", "Industry2")
mydata$Curr = ifelse(mydata$Curr1, "Curr1", "Curr2")