gpt4 book ai didi

r - 如何使用 tidyverse 堆叠多列

转载 作者:行者123 更新时间:2023-12-02 07:19:31 27 4
gpt4 key购买 nike

我有一个这样的宽格式数据框

setseed(1)
df = data.frame(item=letters[1:6], field1a=sample(6,6),field1b=sample(60,6),
field1c=sample(200,6),field2a=sample(6,6),field2b=sample(60,6),
field2c=sample(200,6))

像这样将所有 a 列堆叠在一起、所有 b 列堆叠在一起以及所有 c 列堆叠在一起的最佳方法是什么

items fielda fieldb fieldc
a 2 52 121
a 1 44 57

最佳答案

使用基础 R:

cbind(item=df$item,unstack(transform(stack(df,-1),ind=sub("\\d+","",ind))))
item fielda fieldb fieldc
1 a 2 57 138
2 b 6 39 77
3 c 3 37 153
4 d 4 4 99
5 e 1 12 141
6 f 5 10 194
7 a 3 17 97
8 b 4 23 120
9 c 5 1 98
10 d 1 22 37
11 e 2 49 163
12 f 6 19 131

或者您可以使用 Base R 中的 reshape 函数:

reshape(df,varying = split(names(df)[-1],rep(1:3,2)),idvar = "item",direction = "long")
item time field1a field1b field1c
a.1 a 1 2 57 138
b.1 b 1 6 39 77
c.1 c 1 3 37 153
d.1 d 1 4 4 99
e.1 e 1 1 12 141
f.1 f 1 5 10 194
a.2 a 2 3 17 97
b.2 b 2 4 23 120
c.2 c 2 5 1 98
d.2 d 2 1 22 37
e.2 e 2 2 49 163
f.2 f 2 6 19 131

你也可以自己决定将dataframe的名字分开然后格式化:

names(df)=sub("(\\d)(.)","\\2.\\1",names(df))
reshape(df,varying= -1,idvar = "item",direction = "long")

关于r - 如何使用 tidyverse 堆叠多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50126730/

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