簡體   English   中英

在 R 中將行批量轉置到列

[英]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))

或者,如果我們使用spreadpivot_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM