【问题标题】:Rearrange a dataframe into a matrix based on column values in R? [duplicate]根据 R 中的列值将数据框重新排列为矩阵? [复制]
【发布时间】:2021-02-18 22:56:28
【问题描述】:

我有一个包含三列的数据框:值、类型和类。

看起来像这样:

df = data.frame(value = c(1:10), type = c("a","b","c","a","b","b","c","a","b","b"), 
                 class = c("aos","aos","ezx","ezx","kl","kl","wq","wq","us","us"))

    
value  type class
    1   a   aos
    2   b   aos
    3   c   ezx
    4   a   ezx
    5   b   kl
    6   b   kl
    7   c   wq
    8   a   wq
    9   b   us
    10  b   us


我想将它重新排列成一个矩阵,其中列代表不同的类型值,行代表类值,相交的值是数据帧中原始数据的平均值。

我正在寻找的矩阵应该是这样的:

   aos   ezx    kl   wq     us

a    1     4          8
b    2         5.5         9.5
c          3          7

【问题讨论】:

    标签: r dataframe matrix


    【解决方案1】:

    我们可以使用tapply from base R 来返回结构体

    with(df, tapply(value, list(type, class), FUN = mean))
    #  aos ezx  kl  us wq
    #a   1   4  NA  NA  8
    #b   2  NA 5.5 9.5 NA
    #c  NA   3  NA  NA  7
    

    或者与pivot_wider一起使用values_fn

    library(tidyr)
    library(dplyr)
    library(tibble)
    df %>% 
      pivot_wider(names_from = class, values_from = value, values_fn = mean) %>% 
      column_to_rownames('type') %>%
       as.matrix
    #  aos ezx  kl wq  us
    #a   1   4  NA  8  NA
    #b   2  NA 5.5 NA 9.5
    #c  NA   3  NA  7  NA
    

    【讨论】:

    • tapply(df$value, df[c("type","class")], mean) 作为变体。
    猜你喜欢
    • 2021-07-17
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多