簡體   English   中英

R中的復雜數據幀轉置

[英]Complex data frame transposition in R

我試圖為此尋找答案,但是大多數data.frame / matrix轉換並不像我要完成的那樣復雜。 基本上我有一個data.frame看起來像

          F    M    A
2008_b    1    5    6
2008_r    3    3    6
2008_a    4    1    5
2009_b    1    1    2
2009_r    5    4    9
2009_a    2    2    4

我正在嘗試轉置它,並這樣重命名列和行名稱:

          F_b  M_b  A_b  F_r  M_r  A_r  F_a  M_a  A_a
2008        1    5    6    3    3    6    4    1    5
2009        1    1    2    5    4    9    2    2    4

基本上,每三行就會折疊成一行。 我認為這可以通過一些聰明的plyr或reshape2命令來完成,但是我完全不知如何完成它。

你可以試試

library(dplyr)
library(tidyr)

lvl <- c(outer(colnames(df), unique(gsub(".*_", "", rownames(df))), 
                       FUN=paste, sep="_"))


res <- cbind(Var1=row.names(df), df) %>%
                              gather(Var2, value, -Var1) %>% 
                              separate(Var1, c('Var11', 'Var12')) %>%
                              unite(VarN, Var2, Var12) %>%
                              mutate(VarN=factor(VarN, levels=lvl)) %>%
                              spread(VarN, value)

row.names(res) <- res[,1]
res1 <- res[,-1]
res1
#     F_b M_b A_b F_r M_r A_r F_a M_a A_a
#2008   1   5   6   3   3   6   4   1   5
#2009   1   1   2   5   4   9   2   2   4

數據

df <- structure(list(F = c(1L, 3L, 4L, 1L, 5L, 2L), M = c(5L, 3L, 1L, 
1L, 4L, 2L), A = c(6L, 6L, 5L, 2L, 9L, 4L)), .Names = c("F", 
"M", "A"), class = "data.frame", row.names = c("2008_b", "2008_r", 
"2008_a", "2009_b", "2009_r", "2009_a"))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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