对于“一条记录”,我有一个单独的数据列 可能有数百条(如果不是数千条)记录,其中每条记录具有不同的ID但许多不同的属性ColName2 我想转移表,使其看起来像表2 这在R中是否可行。在Rapid-miner中有可能但我想在R
中实现它我的表1
我想要的 - 表2
由于
答案 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
通常非常有用。有关更多信息,请查看?lapply
和this question。