在R中的一列上展开多个列

在R中的一列上展开多个列,r,dplyr,reshape,tidyr,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),

很抱歉,这个问题已经被问了好几次了,但是我仍然无法理解这个问题

所以我有一个数据框,形式如下:

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'))
我知道如何使用以下方法获取列
1:4

表格(测试[,c(1,3)])%%>%as.data.frame()%%>%spread(类型,频率)


这是我需要帮助的最后三个变量,因为在实际数据帧中,值是连续的,
无法使用。

您试图用多个值变量重新塑造数据,而这些值变量实际上是隐式的,因此为了获得
类型.
列,您需要创建一个带有1的新类型变量,然后从
数据中使用
dcast
。表
包:

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
或者,您可以从基本R使用
重塑
,其中必须手动替换
NA

test$type = 1
reshape(test, idvar = "ID", timevar = "Type", direction = "wide")

#   ID Val.A type.A Val.C type.C Val.B type.B
# 1  1    10      1    NA     NA    NA     NA
# 2  2    11      1    10      1    NA     NA
# 4  3    NA     NA    12      1    10      1
# 6  4    NA     NA    NA     NA     9      1

spread(test,Type,Val)
?另一种选择:
dcast(setDT(test),ID~Type,value.var='Val',fun.aggregate=list(length,sum))
(因为我使用的是v1.9.7,所以我不确定它是否适用于v1.9.6)@delraitiatusMaximus Nice选项。它也适用于v1.9.6。
test$type = 1
reshape(test, idvar = "ID", timevar = "Type", direction = "wide")

#   ID Val.A type.A Val.C type.C Val.B type.B
# 1  1    10      1    NA     NA    NA     NA
# 2  2    11      1    10      1    NA     NA
# 4  3    NA     NA    12      1    10      1
# 6  4    NA     NA    NA     NA     9      1