gpt4 book ai didi

python - 使用增量自定义标题名称 reshape R 列

转载 作者:太空宇宙 更新时间:2023-11-04 03:10:38 25 4
gpt4 key购买 nike

我有一个包含 3 列的数据框,最小值、最大值、平均值。数据框包含 7000 行。

| Min | Max | Average |
| 1.2 | 1.4 | 1.3 |
| 1.0 | 2.0 | 1.5 |
| 1.2 | 1.4 | 1.6 |
| 1.0 | 7.0 | 1.9 |

我想要

| Min1 | Max1 | Average1 | Min2 | Max2 | Average2 |
| 1.2 | 1.4 | 1.3 | 1.0 | 2.0 | 1.5 |
| 1.2 | 1.4 | 1.6 | 1.0 | 7.0 | 1.9 |

请注意标题是如何更改的,以指示第一次观察和第二次观察。

我查看了有关 reshape 的其他答案,其他答案均未显示应如何重命名新列以包含数字。

最佳答案

R中,我们可以使用data.table。将 'data.frame' 转换为 'data.table' (setDT(df1)),使用 'grp' 创建一个分组变量,这样每两行都有一个唯一索引 ('grp'),使用 dcast,我们使用公式方法将“长”格式转换为“宽”格式。 rowid(grp) 给出了每个 grp 的序列。

library(data.table)
setDT(df1)[, grp := gl(.N, 2, .N)]
res <- dcast(df1, grp~rowid(grp), value.var = c("Min", "Max", "Average"),
sep="")[, grp := NULL][]

如果需要,我们可以排序 OP 帖子中显示的列。

res[, order(as.numeric(sub("\\D+", "", names(res)))), with =FALSE]
# Min1 Max1 Average1 Min2 Max2 Average2
#1: 1.2 1.4 1.3 1 2 1.5
#2: 1.2 1.4 1.6 1 7 1.9

我们也可以使用 base R 来做到这一点,方法是通过创建序列向量和 cbind 输出来拆分数据集

do.call(cbind, split(df1,  (seq_len(nrow(df1))-1) %%2 + 1))

或者我们可以使用逻辑索引(循环到最后一行)对交替行进行子集化,并使用 data.frame 来连接它们。

data.frame(df1[c(TRUE, FALSE),], df1[c(FALSE, TRUE),])
# Min Max Average Min.1 Max.1 Average.1
#1 1.2 1.4 1.3 1 2 1.5
#3 1.2 1.4 1.6 1 7 1.9

关于python - 使用增量自定义标题名称 reshape R 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38145252/

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