【问题标题】:Using dplyr or tidyr to reshape dataframe based on values in three columns使用 dplyr 或 tidyr 根据三列中的值重塑数据框
【发布时间】: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 %&gt;% select(group, model, qsec) %&gt;% tidyr::spread(group, qsec, fill = 0)

标签: r dplyr


【解决方案1】:

我想这就是你想要的:

library(tidyverse)

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

row.names(df2) <- df2$model

df_final <- df2[-1]

【讨论】:

    【解决方案2】:

    使用来自reshape2dcast 和来自tidyrreplace_na

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

    【讨论】:

    • 请注意:dcast 不是来自 dplyr,而是来自 reshape2。该软件包已退役,但基本功能已移至 tidyr(如另一个答案中使用的收集和传播命令)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 2019-11-15
    • 2020-12-27
    • 2011-03-29
    • 2018-04-24
    相关资源
    最近更新 更多