[英]Transpose Rows in batches to Columns in R
我的 data.frame df
如下所示:
A 1
A 2
A 5
B 2
B 3
B 4
C 3
C 7
C 9
我希望它看起來像這樣:
A B C
1 2 3
2 3 7
5 4 9
我已經嘗試過spread()
但可能不是正確的方式。 有任何想法嗎?
我們可以使用來自base R
unstack
unstack
unstack(df1, col2 ~ col1)
# A B C
#1 1 2 3
#2 2 3 7
#3 5 4 9
或split
data.frame(split(df1$col2, df1$col1))
或者,如果我們使用spread
或pivot_wider
,請確保創建一個序列列
library(dplyr)
library(tidyr)
df1 %>%
group_by(col1) %>%
mutate(rn = row_number()) %>%
ungroup %>%
pivot_wider(names_from = col1, values_from = col2) %>%
# or use
# spread(col1, col2) %>%
select(-rn)
# A tibble: 3 x 3
# A B C
# <int> <int> <int>
#1 1 2 3
#2 2 3 7
#3 5 4 9
或使用dcast
library(data.table)
dcast(setDT(df1), rowid(col1) ~ col1)[, .(A, B, C)]
df1 <- structure(list(col1 = c("A", "A", "A", "B", "B", "B", "C", "C",
"C"), col2 = c(1L, 2L, 5L, 2L, 3L, 4L, 3L, 7L, 9L)),
class = "data.frame", row.names = c(NA,
-9L))
在data.table
中,我們可以使用dcast
:
library(data.table)
dcast(setDT(df), rowid(col1)~col1, value.var = 'col2')[, col1 := NULL][]
# A B C
#1: 1 2 3
#2: 2 3 7
#3: 5 4 9
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.