我有一個很大的 excel 電子表格,其中行的列數不等。列的名稱會重復,這些列以各種格式(數字、字符、日期等)存盤資料。如何將這些資料重塑為長而整潔的格式?
這是我的資料框的樣子
df <- tibble(id = c("T1", "T2", "T3"), x = c(4:6), y = c("A", "B", "C"), x = c(7, 8, NA), y = c("A", "B", NA), x = c(NA, 4, NA), y= c(NA, "F", NA), .name_repair = "minimal")
df
我想要這種型別的輸出
| ID | X | 是 |
|---|---|---|
| T1 | 4 | 一個 |
| T1 | 7 | 一個 |
| T2 | 5 | 乙 |
| T2 | 8 | 乙 |
| T2 | 4 | F |
| T3 | 6 | C |
非常感謝您的幫助!
uj5u.com熱心網友回復:
您不需要在此處旋轉,只需分別為每組列系結行。您可以手動執行以下操作:
library(tidyverse)
bind_rows(
df[,1:3],
df[,c(1,4:5)],
df[,c(1,6:7)]
)
然后只需過濾掉帶有NA值的行。如果您有額外的列來執行此操作,您可以改為使用purrr::map_dfr數字向量進行列索引以自動選擇正確的列,然后將它們系結在一起。然后只需使用dplyr::filter(across(...)all 洗掉行NA。
map_dfr(
seq(2,6,2),
~df[, c(1, .x, .x 1)]
) %>%
filter(across(c(x,y), ~ !is.na(.x))) %>%
arrange(id, y, x)
#> # A tibble: 6 × 3
#> id x y
#> <chr> <dbl> <chr>
#> 1 T1 4 A
#> 2 T1 7 A
#> 3 T2 5 B
#> 4 T2 8 B
#> 5 T2 4 F
#> 6 T3 6 C
我添加了最后一個dplyr::arrange()呼叫以匹配您的輸出,您可以根據實際想要的資料排序方式進行調整。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/380652.html
