gpt4 book ai didi

r - R中的特殊 reshape

转载 作者:行者123 更新时间:2023-12-05 01:26:31 26 4
gpt4 key购买 nike

考虑一个 3x3 char 数据框:

example <- data.frame(one = c("a","b","c"),
two = c("a","b","b"),
three = c ("c","a","b"))

我想将这些数据调整为 6x2 并添加以下内容:

desired <- data.frame(one = c("a","a","b","b",
"c","b"),
two = c("a","c","b","a","b","b"))

对于原始示例数据框,我想在每个行索引下方rbind() example[,2:3] 的内容。

这可以通过以下方式实现:

ex <- as.matrix(example)

des <- as.data.frame(rbind(ex[,1:2], ex[,2:3]))

也许对任意数量的列使用 library(tidyverse) 会更好?

最佳答案

对于每一对列,转置它们定义的子data.frame并强制转换为向量。然后强制到 data.frame 并设置结果的名称。
下面的代码应该是可扩展的,它不会对列数进行硬编码。

desired2 <- as.data.frame(
lapply(seq(names(example))[-1], \(k) c(t(example[(k-1):k])))
)
names(desired2) <- names(example)[-ncol(example)]

identical(desired, desired2)
#[1] TRUE

上面的代码重写为一个函数。

reformat <- function(x){
y <- as.data.frame(
lapply(seq(names(x))[-1], \(k) c(t(x[(k-1):k])))
)
names(y) <- names(x)[-ncol(x)]
y
}

reformat(example)
example %>% reformat()

另一个例子,有 6 列输入。

ex1 <- example
ex2 <- example
names(ex2) <- c("fourth", "fifth", "sixth")
ex <- cbind(ex1, ex2)

reformat(ex)
ex %>% reformat()

关于r - R中的特殊 reshape ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70239346/

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