【问题标题】:R: aggregate similar columns and use column name as value in RR:聚合相似的列并使用列名作为 R 中的值
【发布时间】:2012-04-02 15:39:50
【问题描述】:

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

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

【问题讨论】:

  • 您应该使用dput 提供您的data.frame 样本的可重现答案(类似于dput(mydataframe[1:5, ])
  • 谢谢。我一直在努力如何呈现数据。
  • 请停止回滚我们对格式的改进。

标签: r dataframe aggregate


【解决方案1】:

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

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,]

您可能想要删除最后一列。

【讨论】:

    【解决方案2】:

    您可以使用ifelse 创建新列:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-24
      • 2020-01-20
      • 1970-01-01
      • 2022-11-08
      • 1970-01-01
      相关资源
      最近更新 更多