我有一个看起来像这样的数据框
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是实数,并且它们都具有值。但是Industry1
和industry2
(货币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=Industry
,Curr
等所有字符串。我还有另一个表将每个列名链接到它的类型
ColName Type
FactorA Factor
FactorB Factor
Industry1 Industry
Industry2 Industry
Curr1 Curr
Curr2 Curr
答案 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")