我希望在 R 中的前一列下堆叠所有其他列。有什么建议吗?
例如:
dat <- data.frame(
c1 = c("A", "B", "C"),
c2 = c(1, 2, 3),
c3 = c("D", "E", "F"),
c4 = c(4, 5, 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/