gpt4 book ai didi

r - 在 R 中,将数据框中的向量值列拆分为多列

转载 作者:行者123 更新时间:2023-12-02 08:15:25 27 4
gpt4 key购买 nike

我有一个数据框,其中一列是矩阵,而不是向量,我想将它分成多个向量值列。

比如这个

set.seed(101)
Df <- data.frame(x = runif(100),
y = round(runif(100)))

descriptives <- function(arg) c(mean(arg), median(arg), sd(arg))
results <- aggregate(x ~ y, data=Df, descriptives)

给我

> results
y x.1 x.2 x.3
1 0 0.4710224 0.4280053 0.3206661
2 1 0.5769064 0.6220120 0.2683387

这是一个 2x2 数据框,第二列是一个 2x3 矩阵:

> dim(results)
[1] 2 2
> results[,2]
[,1] [,2] [,3]
[1,] 0.4710224 0.4280053 0.3206661
[2,] 0.5769064 0.6220120 0.2683387

我想将该矩阵拆分为三个列向量。

我可以

results <- cbind(results$y, as.data.frame(results[,2]))
names(results) <- c('y', 'mean', 'median', 'sd')

> results
y mean median sd
1 0 0.4710224 0.4280053 0.3206661
2 1 0.5769064 0.6220120 0.2683387

但是有没有更直接、更简单的方法呢?我在想 tidyrseparate 之类的东西?

最佳答案

在这种情况下,对于矩阵,您可以使用cbind:

cbind(results[1], results[[2]])
# y 1 2 3
# 1 0 0.4710224 0.4280053 0.3206661
# 2 1 0.5769064 0.6220120 0.2683387

在第一个参数上使用 [ 确保它是一个 data.frame,因此使用 cbind.data.frame 并且结果没有被强制转换为矩阵。但是在第二个参数上使用 [[ 可确保我们绑定(bind)到第二列中的 2x3 矩阵,而不是包含该矩阵的数据框。

更一般地说,tidyr::unnest 适用于 vectorlist 列,但结果是长格式 - 你会添加列 ID 并将其展开以使其恢复为宽格式。

但是,最简单的方法可能是使用带有自定义 .funs 参数的 dplyrsummarize_at:

library(dplyr)
descrip = funs(m = mean, med = median, sd = sd)
Df %>% group_by(y) %>% summarize_at("x", .funs = descrip)
# # A tibble: 2 × 4
# y m med sd
# <dbl> <dbl> <dbl> <dbl>
# 1 0 0.4710224 0.4280053 0.3206661
# 2 1 0.5769064 0.6220120 0.2683387

关于r - 在 R 中,将数据框中的向量值列拆分为多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42400748/

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