gpt4 book ai didi

r - 带有多个键和值的 tidyr::spread()

转载 作者:行者123 更新时间:2023-12-03 20:29:09 27 4
gpt4 key购买 nike

我认为这已被多次询问,但我找不到合适的词来找到可行的解决方案。

我该怎么办 spread()基于多个键的多个值的数据框?

我正在处理的简化(我有更多的列要传播,但只有两个键:Idtime 给定测量的点)数据如下所示:

df <- data.frame(id = rep(seq(1:10),3), 
time = rep(1:3, each=10),
x = rnorm(n=30),
y = rnorm(n=30))

> head(df)
id time x y
1 1 1 -2.62671241 0.01669755
2 2 1 -1.69862885 0.24992634
3 3 1 1.01820778 -1.04754037
4 4 1 0.97561596 0.35216040
5 5 1 0.60367158 -0.78066767
6 6 1 -0.03761868 1.08173157
> tail(df)
id time x y
25 5 3 0.03621258 -1.1134368
26 6 3 -0.25900538 1.6009824
27 7 3 0.13996626 0.1359013
28 8 3 -0.60364935 1.5750232
29 9 3 0.89618748 0.0294315
30 10 3 0.14709567 0.5461084

我想要的是一个像这样填充的数据框:

enter image description here

每排一排 Id time 中每个值的列和每个测量变量。

最佳答案

使用 tidyr ( tidyr_0.8.3.9000 ) 的 devel 版本,我们可以使用 pivot_wider 将多个值列从长格式 reshape 为宽格式

library(dplyr)
library(tidyr)
library(stringr)
df %>%
mutate(time = str_c("time", time)) %>%
pivot_wider(names_from = time, values_from = c("x", "y"), names_sep="")
# A tibble: 10 x 7
# id xtime1 xtime2 xtime3 ytime1 ytime2 ytime3
# <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1 1 -0.256 0.483 -0.254 -0.652 0.655 0.291
# 2 2 1.10 -0.596 -1.85 1.09 -0.401 -1.24
# 3 3 0.756 -2.19 -0.0779 -0.763 -0.335 -0.456
# 4 4 -0.238 -0.675 0.969 -0.829 1.37 -0.830
# 5 5 0.987 -2.12 0.185 0.834 2.14 0.340
# 6 6 0.741 -1.27 -1.38 -0.968 0.506 1.07
# 7 7 0.0893 -0.374 -1.44 -0.0288 0.786 1.22
# 8 8 -0.955 -0.688 0.362 0.233 -0.902 0.736
# 9 9 -0.195 -0.872 -1.76 -0.301 0.533 -0.481
#10 10 0.926 -0.102 -0.325 -0.678 -0.646 0.563

注意:数字不同,因为在创建示例数据集时没有设置种子

关于r - 带有多个键和值的 tidyr::spread(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53849240/

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