簡體   English   中英

R data.frame 到像 facet_grid 這樣的矩陣

[英]R data.frame to a matrix like facet_grid

我有一個這樣的data.frame:

toyExample <- matrix(0,6,4)
colnames(toyExample) <- c("a","b","c","value")
rownames(toyExample) <- 1:6

toyExample[,1] <- c(rep(20,4),rep(30,2))
toyExample[,2] <- c(rep(50,4),rep(100,2))
toyExample[,3] <- c(c("Method1","Method2","Method3","Method4","Method3","Method4"))
toyExample[,4] <- 1:6

toyExample <- toyExample %>% as.data.frame()

data.frame 由 6 行 4 列組成。 我想以不同的方式組織我的 data.frame。 這應該是理想的結果:

whatIwant <- matrix(NA,nrow=2,ncol=4)
rownames(whatIwant) <- c("a=20,b=50","a=30,b=100")
colnames(whatIwant) <- c("Method1","Method2","Method3","Method4")
whatIwant[1,] <- 1:4
whatIwant[2,3:4] <- 5:6 

該行由兩個變量ab的組合組成。 由變量c 組成的列。 我怎樣才能以自動方式做到這一點? 這只是一個玩具示例,我想在更大的 data.frame 中執行此操作,並且無法手動完成。

使用dplyrtidyr你可以嘗試:

library(dplyr)
library(tidyr)

toyExample %>%
  mutate(a = paste('a =', a), 
         b = paste('b =', b)) %>%
  unite(row, a, b, sep = ',') %>%
  pivot_wider(names_from = c, values_from = value) %>%
  tibble::column_to_rownames('row')

#               Method1 Method2 Method3 Method4
#a = 20,b = 50        1       2       3       4
#a = 30,b = 100    <NA>    <NA>       5       6

我們可以通過插入值來創建帶有glue的列,然后使用pivot_wider

library(dplyr)
library(tidyr)
toyExample %>% 
     mutate(new = glue::glue("a = {a}, b = {b}")) %>%
     select(-a, -b) %>%
     pivot_wider(names_from = c, values_from = value) %>% 
     column_to_rownames('new')
#                Method1 Method2 Method3 Method4
#a = 20, b = 50        1       2       3       4
#a = 30, b = 100    <NA>    <NA>       5       6

暫無
暫無

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

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