gpt4 book ai didi

r - 数据框到矩阵 - 多行

转载 作者:行者123 更新时间:2023-12-04 10:44:43 27 4
gpt4 key购买 nike

我正在尝试将 data.frame 转换为矩阵。我计算了 iris 数据集的一些统计数据,并希望将每个统计数据放在单独的行中。下面的代码在一行中显示了所有统计数据(平均值和中位数),这不是所需的输出。我想要这样的东西:

stat Sepal.Lenght  Sepal.Width  ....
avg 10.5 .....
med ...... .....

下面的代码:
data_iris <- iris
avg <- data_iris %>%
summarise_at(vars(Sepal.Length:Petal.Width),mean,na.rm=TRUE)

med <- data_iris %>%
summarise_at(vars(Sepal.Length:Petal.Width),median,na.rm=TRUE)


column <- colnames(data_iris[1:4])
rown <- c("avg","median")

df <- data.frame(avg=avg,med=med)
m <- data.matrix(df)

还有一个问题:我想计算分位数,但出现错误:
qrtl <- data_iris %>%
summarise_at(vars(Sepal.Length:Petal.Width),quantile,na.rm=TRUE)

错误:列 Sepal.Length长度必须为 1(汇总值),而不是 5

怎么了?

最佳答案

如果我们使用 pivot_longer 将其 reshape 为“长”,则可以做到这一点。

library(dplyr)
library(tidyr)
iris %>%
summarise_if(is.numeric, list(avg = mean, med = median)) %>%
pivot_longer(everything(), names_to = c('.value', 'stat'), names_sep="_")
# stat Sepal.Length Sepal.Width Petal.Length Petal.Width
#1 avg 5.843333 3.057333 3.758 1.199333
#2 med 5.800000 3.000000 4.350 1.300000

如果需要转成 matrix ,然后将 'stat' 更改为行名,然后使用 data.matrix
library(tibble)
iris %>%
summarise_if(is.numeric, list(avg = mean, med = median)) %>%
pivot_longer(everything(), names_to = c('.value', 'stat'), names_sep="_") %>%
column_to_rownames('stat') %>%
data.matrix
quantiledev 中工作正常 dplyr 的版本- 0.8.99.9000`
iris %>%        
summarise_at(vars(Sepal.Length:Petal.Width),quantile, na.rm=TRUE)
# Sepal.Length Sepal.Width Petal.Length Petal.Width
#1 4.3 2.0 1.00 0.1
#2 5.1 2.8 1.60 0.3
#3 5.8 3.0 4.35 1.3
#4 6.4 3.3 5.10 1.8
#5 7.9 4.4 6.90 2.5

OP的包版本是 0.8.3 , 所以可能用 list 包装会工作
iris %>%
summarise_at(vars(Sepal.Length:Petal.Width),
list(quantile = ~ list(quantile(., na.rm=TRUE)))) %>%
unnest(c(names(.)))

关于r - 数据框到矩阵 - 多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59760764/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com