如何將這兩列轉換為一列
structure(list(a = c("Q1-2020", "Q1-2020", "Q1-2020", "Q2-2020",
"Q2-2020", "Q2-2020", "Q3-2020", "Q3-2020", "Q3-2020", "Q4-2021",
"Q4-2021", "Q4-2021"), b = c("Apr-2020", "May-2020", "Jun-2020",
"Jul-2020", "Aug-2020", "Sep-2020", "Oct-2020", "Nov-2020", "Dec-2020",
"Jan-2021", "Feb-2021", "Mar-2021")), row.names = c(1L, 21L,
41L, 61L, 81L, 101L, 121L, 141L, 161L, 181L, 201L, 221L), class = "data.frame")
預期產出
output = c("q1-2020",
"Apr-20", "May-20", "Jun-20", "q2-2020", "Jul-20", "Aug-20",
"Sep-20", "q3-2020", "Oct-20", "Nov-20", "Dec-20", "q4-2021",
"Jan-21", "Feb-21", "Mar-21")

uj5u.com熱心網友回復:
lapply過unique "a"的。
unlist(lapply(unique(dat$a), \(x) c(x, dat[dat$a == x, 'b'])))
# [1] "Q1-2020" "Apr-2020" "May-2020" "Jun-2020" "Q2-2020" "Jul-2020"
# [7] "Aug-2020" "Sep-2020" "Q3-2020" "Oct-2020" "Nov-2020" "Dec-2020"
# [13] "Q4-2021" "Jan-2021" "Feb-2021" "Mar-2021"
uj5u.com熱心網友回復:
我們可能會replace在duplicated在“A”與元件NA,而提取“B”的子串,transpose資料并取出NAs的na.omit
out2 <- c(na.omit(c(t(transform(df1,
a = tolower(replace(a, duplicated(a), NA)),
b = sub("-\\d{2}", "-", b))))))
- 檢查 OP 的輸出
> identical(output, out2)
[1] TRUE
uj5u.com熱心網友回復:
我們可以利用您資料的常規結構,只需將 df$a 的唯一值插入 df$b 中,就像在這個很好的答案中一樣。
v <- unique(df$a)
c(rbind(v, matrix(df$b, ncol = length(v))))
#> [1] "Q1-2020" "Apr-2020" "May-2020" "Jun-2020" "Q2-2020" "Jul-2020"
#> [7] "Aug-2020" "Sep-2020" "Q3-2020" "Oct-2020" "Nov-2020" "Dec-2020"
#> [13] "Q4-2021" "Jan-2021" "Feb-2021" "Mar-2021"
或者您可以使用 unlist,在通過重復的 id 列拆分資料框后(我稱之為“準嵌套”),然后使用 lapply 將每個唯一 id 與另一列系結。
quasi_nest <- lapply(split(df, df$a), function(x) {
c(unique(x$a), x$b)
}
)
unlist(quasi_nest, use.names = FALSE)
#> [1] "Q1-2020" "Apr-2020" "May-2020" "Jun-2020" "Q2-2020" "Jul-2020"
#> [7] "Aug-2020" "Sep-2020" "Q3-2020" "Oct-2020" "Nov-2020" "Dec-2020"
#> [13] "Q4-2021" "Jan-2021" "Feb-2021" "Mar-2021"
uj5u.com熱心網友回復:
我們可以嘗試基本 R 選項
> c(apply(aggregate(. ~ a, df, c), 1, c))
[1] "Q1-2020" "Apr-2020" "May-2020" "Jun-2020" "Q2-2020" "Jul-2020"
[7] "Aug-2020" "Sep-2020" "Q3-2020" "Oct-2020" "Nov-2020" "Dec-2020"
[13] "Q4-2021" "Jan-2021" "Feb-2021" "Mar-2021"
或者
> unlist(Map(c, names(lst <- with(df, split(b, a))), lst), use.names = FALSE)
[1] "Q1-2020" "Apr-2020" "May-2020" "Jun-2020" "Q2-2020" "Jul-2020"
[7] "Aug-2020" "Sep-2020" "Q3-2020" "Oct-2020" "Nov-2020" "Dec-2020"
[13] "Q4-2021" "Jan-2021" "Feb-2021" "Mar-2021"
或者,我們可以嘗試以下igraph選項
> library(igraph)
> do.call(c, Map(function(x) names(V(x)), decompose(graph_from_data_frame(df))))
[1] "Q1-2020" "Apr-2020" "May-2020" "Jun-2020" "Q2-2020" "Jul-2020"
[7] "Aug-2020" "Sep-2020" "Q3-2020" "Oct-2020" "Nov-2020" "Dec-2020"
[13] "Q4-2021" "Jan-2021" "Feb-2021" "Mar-2021"
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/390434.html
標籤:r
上一篇:旋轉多列R
