R将列转置为二进制行

时间:2014-08-19 11:15:26

标签: sql r transpose

对于“一条记录”,我有一个单独的数据列 可能有数百条(如果不是数千条)记录,其中每条记录具有不同的ID但许多不同的属性ColName2 我想转移表,使其看起来像表2 这在R中是否可行。在Rapid-miner中有可能但我想在R

中实现它

我的表1

  • ID ColName2
  • 1A Item1
  • 1A Item2
  • 1A Item3
  • 1A Item4
  • 2A Item5

我想要的 - 表2

  • ID Item1 Item2 Item3 Item4 Item 5
  • 1A 1 1 1 1 0
  • 2A 0 0 0 0 1

由于

1 个答案:

答案 0 :(得分:1)

您可以使用reshape2,例如:

> df <- data.frame(ID = c(rep("1A", 4), "2A"), ColName = 1:5)
> df
#  ID ColName
#1 1A       1
#2 1A       2
#3 1A       3
#4 1A       4
#5 2A       5

library(reshape2)

> df2 <- dcast(df, ID ~ ColName, fun.aggregate = any, value.var = "ColName")

这次重塑的结果是:

  ID     1     2     3     4     5
1 1A  TRUE  TRUE  TRUE  TRUE FALSE
2 2A FALSE FALSE FALSE FALSE  TRUE

所以你有逻辑值(你想要1的地方是TRUE,你想要0的地方是FALSE)。由于您可以将逻辑值转换为数字,其中TRUE == 1和FALSE == 0,您只需要将所有列(第一列除外)转换为数字。为此,您可以在data.frame上使用lapply,但第一列(由df2 [-1]表示)除外,并将函数as.numeric应用于其他每一列:

> df2[-1] <- lapply(df2[-1], as.numeric)
> df2
#  ID 1 2 3 4 5
#1 1A 1 1 1 1 0
#2 2A 0 0 0 0 1
如果要将函数应用于data.frame的所有列或列表中的所有元素,

lapply通常非常有用。有关更多信息,请查看?lapplythis question