r - 在 R 中每隔一列堆叠一次

标签 r dataframe

我希望在 R 中的前一列下堆叠所有其他列。有什么建议吗?

例如:

<表类="s-表"> <头> c1 c2 c3 c4 <正文> 一个 1 D 4 B 2 E 5 C 3 F 6
dat <- data.frame(
    c1 = c("A", "B", "C"),
    c2 = c(1, 2, 3),
    c3 = c("D", "E", "F"),
    c4 = c(4, 5, 6))

看起来像这样:

<表类="s-表"> <头> c1 c2 <正文> 一个 D 1 4 B E 2 5 C F 3 6
dat2 <- data.frame(
    c1 = c("A", 1, "B", 2, "C", 3),
    c2 = c("D", 4, "E", 5, "F", 6))

提前致谢。

最佳答案

stack() 的基本方法:

as.data.frame(sapply(seq(1, ncol(dat), 2), \(x) stack(dat[x:(x+1)])[[1]]))

#   V1 V2
# 1  A  D
# 2  B  E
# 3  C  F
# 4  1  4
# 5  2  5
# 6  3  6

您还可以使用结构格式重命名数据并将其传递给 tidyr::pivot_longer():

library(dplyr)
library(tidyr)

dat %>%
  rename_with(~ paste0('c', ceiling(seq_along(.x) / 2), '_', 1:2)) %>%
  mutate(across(, as.character)) %>%
  pivot_longer(everything(), names_to = c(".value", NA), names_sep = '_')

# # A tibble: 6 × 2
#   c1    c2
#   <chr> <chr>
# 1 A     D
# 2 1     4
# 3 B     E
# 4 2     5
# 5 C     F
# 6 3     6

rename 行将 c1 - c4 转换为 c1_1, c1_2, c2_1, c2_2

关于r - 在 R 中每隔一列堆叠一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73411053/

相关文章:

python - pandas 将多个 groupby 结果放入同一个表中

r - 是否可以在 Shiny 的应用程序中使用操作按钮呈现 "runtime:shiny"rmarkdown (.rmd) 文件?

r - RPres 中的代码框大小和字体大小

python - 通过 Pandas 数据框中的多索引选择(子集)

r - 如果满足条件,则将值保留在行中

dataframe - 如何在 Julia 中将列数据类型从浮点更改为字符串?

使用 read_excel 自动删除列名中的所有空格

r - 在 Ubuntu 10.04 上安装 R 2.13.0 包(插入符号)时出错

r - 用于计算 R 中矩阵的特征值的函数

r - data[, "col"] 和 data$col 之间的区别