【发布时间】:2019-11-25 12:19:21
【问题描述】:
我需要根据“组”、“模型”和“qsec”列上的值重塑我的数据框。以 mtcars 数据为例,是否可以使用 dplyr 或 tidyr 来实现这一点?
我需要重塑一个非常大的数据框,不幸的是我不知道如何使用 dplyr 来解决这个问题。
df<-mtcars[1:3,]
df$model <- rownames(df)
row.names(df)<-NULL
df<-df[rep(seq_len(nrow(df)), each=2),]
df$group <- c("A","B","A","C","A","B")
####
> df
mpg cyl disp hp drat wt qsec vs am gear carb model group
1 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 Mazda RX4 A
1.1 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 Mazda RX4 B
2 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 Mazda RX4 Wag A
2.1 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 Mazda RX4 Wag C
3 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 Datsun 710 A
3.1 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 Datsun 710 B
#
我需要以一种方式重塑,每列将是一个组(A、B 或 C),并且作为 row.names,每个汽车模型属于每个组。这些值将是“qsec”列上的值,对于组没有任何“qsec”值的情况为零。
df_result <- data.frame(A = c(16.46,17.02,18.61), B = c(16.46,0,18.61), C = c(0,17.02,0))
row.names(df_result) <- unique(df$model)
> df_result
A B C
Mazda RX4 16.46 16.46 0.00
Mazda RX4 Wag 17.02 0.00 17.02
Datsun 710 18.61 18.61 0.00
【问题讨论】:
-
df %>% select(group, model, qsec) %>% tidyr::spread(group, qsec, fill = 0)