データフレームの既存の3行ごとに空白行を挿入するにはどうすればよいですか?Webスクレイピングプロセスの後、必要な情報を含むデータフレームを取得しますが、最終的なExcel形式では、3行ごとに空白行を追加する必要があります。Webでヘルプを検索しましたが、まだ解決策が見つかりません。
架空のデータでは、私のデータフレームの構造は次のとおりです。
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
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加