R: объединить похожие столбцы и использовать имя столбца в качестве значения в R - PullRequest
0 голосов
/ 02 апреля 2012

У меня есть фрейм данных, который выглядит следующим образом

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

Ответы [ 2 ]

3 голосов
/ 02 апреля 2012

Вы можете свернуть столбцы, используя функцию 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)

Обратитесь к файлу справки melt для получения дополнительной информации.Затем просто немного подмножеств, чтобы получить то, что вы хотите:

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

Возможно, вы захотите удалить последний столбец.

0 голосов
/ 02 апреля 2012

Вы можете использовать ifelse для создания новых столбцов:

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