使用dplyr或tidyr根据三列中的值重塑数据框

时间:2019-07-16 17:37:37

标签: r dplyr

我需要根据“组”,“模型”和“ qsec”列上的值重塑数据框。以mtcars数据为例,是否可以使用dplyr或tidyr来实现这一目标?

我需要重塑非常大的数据框,但不幸的是,我不知道如何使用dplyr解决此问题。

http://localhost:8080/employees?pageNumber=0&pageSize=4

我需要重塑每个列将是一个组(A,B或C),并作为row.names,每个汽车模型都属于每个组。这些值将是“ qsec”列上的值,对于组没有任何“ qsec”值的情况则为零。

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

2 个答案:

答案 0 :(得分:1)

我想这就是你想要的:

library(tidyverse)

df2 <- df%>%
select(group, model, qsec)%>%
  spread(key = group, value = qsec)

row.names(df2) <- df2$model

df_final <- df2[-1]

答案 1 :(得分:1)

使用dcast中的reshape2replace_na中的tidyr

df <- df %>%
  select(model, qsec, group) %>%
  dcast(model ~ group, value.var = "qsec") %>%
  replace_na(list(A = 0, B = 0, C = 0))