将多列分布在 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_...
列,您将需要使用 ones 创建一个新的类型变量,然后使用dcast
来自 data.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
抱歉,这个问题已经被问了 多次 次,但我仍然无法解决这个问题。
所以我有一个数据框,形式为:
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_...
列,您将需要使用 ones 创建一个新的类型变量,然后使用dcast
来自 data.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