在R中的列上传播多个列

时间:2016-07-24 20:04:16

标签: r dplyr reshape tidyr

很抱歉,因为这个问题已被几次询问,但我仍然无法解决这个问题。

所以我有一个数据框,格式为:

ID Val Type
1  10    A
2  11    A
2  10    C
3  10    B
3  12    C
4   9    B

它没有多大帮助,但你可以使用

library(tidyr)
test <- data.frame(ID = c(1,2,2,3,3,4), 
                   Val = c(10,11,10,10,12,9), 
                   Type = c('A', 'A', 'C', 'B', 'C', 'B'))

我想拆分它以获得:

ID A.Type B.Type C.Type A.Val B.Val C.Val
1    1     0       0     10    0     0
2    1     0       1     11    0    10
3    0     1       1      0   10    12
4    0     0       0      0    9     0

我知道如何使用以下内容获取列1:4

table(test[, c(1, 3)]) %>% as.data.frame() %>% spread(Type, Freq)

这是我需要帮助的最后三个,因为实际的数据框架值是连续的,table不能使用。

1 个答案:

答案 0 :(得分:3)

您正在尝试使用多个值变量重新整形数据,其中实际上是隐式的,因此为了获得type_...列,您需要创建一个带有一个的新类型变量,然后使用{{ 1}}来自dcast包:

data.table

或者您可以使用基地R中的library(data.table) setDT(test) dcast(test[, type := 1][], ID ~ Type, value.var = c("type", "Val"),fill = 0) # ID type_A type_B type_C Val_A Val_B Val_C # 1: 1 1 0 0 10 0 0 # 2: 2 1 0 1 11 0 10 # 3: 3 0 1 1 0 10 12 # 4: 4 0 1 0 0 9 0 ,其中reshape必须手动替换:

NA