gpt4 book ai didi

r - 如何在数据框中每 3 个现有行插入空白行?

转载 作者:行者123 更新时间:2023-12-05 03:52:56 25 4
gpt4 key购买 nike

如何在数据框中每 3 个现有行插入空白行?在网络抓取过程之后,我得到了一个包含我需要的信息的数据框,但是最终的 excel 格式要求我每 3 行添加一个空白行。我已在网上搜索帮助,但尚未找到解决方案。

假设数据,我的数据框结构如下:

mi_df <- data.frame(
"ID" = rep(1:3,c(3,3,3)),
"X" = as.character(c("a", "a", "a", "b", "b", "b", "c", "c", "c")),
"Y" = seq(1,18, by=2)
)

mi_df
ID X Y
1 1 a 1
2 1 a 3
3 1 a 5
4 2 b 7
5 2 b 9
6 2 b 11
7 3 c 13
8 3 c 15
9 3 c 17

我希望的结果是这样的

   ID X  Y
1 1 a 1
2 1 a 3
3 1 a 5
4
5 2 b 7
6 2 b 9
7 2 b 11
8
9 3 c 13
10 3 c 15
11 3 c 17

最佳答案

如果数据框的索引包含 NA,则输出将包含 NA 行。所以我的目标是创建一个类似 1 2 3 NA 4 5 6 NA ... 的向量,并将其设置为 mi_df 的索引。

cut <- rep(1:(nrow(mi_df)/3), each = 3)
mi_df[sapply(split(1:nrow(mi_df), cut), c, NA), ]

# ID X Y
# 1 1 a 1
# 2 1 a 3
# 3 1 a 5
# NA NA <NA> NA
# 4 2 b 7
# 5 2 b 9
# 6 2 b 11
# NA.1 NA <NA> NA
# 7 3 c 13
# 8 3 c 15
# 9 3 c 17
# NA.2 NA <NA> NA

如果nrow(mi_df)不是3的倍数,那么下面是一个通用的解决方案:

# Version 1
cut <- rep(1:ceiling(nrow(mi_df)/3), each = 3, len = nrow(mi_df))
mi_df[Reduce(c, lapply(split(1:nrow(mi_df), cut), c, NA)), ]

# Version 2
cut <- rep(1:ceiling(nrow(mi_df)/3), each = 3, len = nrow(mi_df))
mi_df[Reduce(function(x, y) c(x, NA, y), split(1:nrow(mi_df), cut)), ]

不要介意输出中的 NA,因为一些将数据写入 excel 文件的函数有一个可选参数控制 NA 值是否转换为字符串或空的。例如

library(openxlsx)
write.xlsx(df, "test.xlsx", keepNA = FALSE) # defaults to FALSE

关于r - 如何在数据框中每 3 个现有行插入空白行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61940028/

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