簡體   English   中英

在R中的一列上分布多個列

[英]Spreading multiple columns over a column in R

抱歉,因為已經問幾次這個問題,但是我仍然無法解決這個問題。

所以我有一個形式的數據框:

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

您正在嘗試與多個值的變量,其中的人實際上是隱含重塑你的數據,所以為了獲得type_...列,您將需要創建一個新的變量類型與那些然后用dcastdata.table包:

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使用reshape ,其中必須手動替換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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM