我有一個包含一列和 n 行的資料框,如下所示:
data.frame(rep(x=c("c","a","c","b","c","d"),times=c(1,4,1,4,1,4)))
現在,我想拆分為每個c新列創建的資料框的這一列。目的是將只有一列的資料框轉換為這種形式:
| C | C | C |
|---|---|---|
| 一種 | b | d |
| 一種 | b | d |
| 一種 | b | d |
| 一種 | b | d |
uj5u.com熱心網友回復:
使用tidyverse,我們可以在每次c出現在x列中時創建一個新組,然后我們可以在資料范圍內進行旋轉。通常,不鼓勵重復名稱,因此我創建了一個連續的c列名。
library(tidyverse)
results <- df %>%
group_by(idx = cumsum(x == "c")) %>%
filter(x != "c") %>%
mutate(rn = row_number()) %>%
pivot_wider(names_from = idx, values_from = x, names_prefix = "c_") %>%
select(-rn)
輸出
c_1 c_2 c_3
<chr> <chr> <chr>
1 a b d
2 a b d
3 a b d
4 a b d
但是,如果您真的想要重復名稱,那么我們可以添加set_names:
purrr::set_names(results, "c")
c c c
<chr> <chr> <chr>
1 a b d
2 a b d
3 a b d
4 a b d
或者在基礎 R中,我們可以用 來創建分組cumsum,然后拆分這些組,然后用 重新系結在一起cbind。然后,我們洗掉包含c字符的第一行。
names(df) <- "c"
do.call(cbind, split(df, cumsum(df$c == "c")))[-1,]
# c c c
#2 a b d
#3 a b d
#4 a b d
#5 a b d
uj5u.com熱心網友回復:
您的列具有相同數量的值,如給出的示例所示:
unstack(df, x ~ cumsum(x=="c"))
X1 X2 X3
1 c c c
2 a b d
3 a b d
4 a b d
5 a b d
然后您可以洗掉第一行
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/468529.html
下一篇:在地圖打字稿中添加額外的屬性型別
