[英]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
该行由两个变量a和b的组合组成。 由变量c 组成的列。 我怎样才能以自动方式做到这一点? 这只是一个玩具示例,我想在更大的 data.frame 中执行此操作,并且无法手动完成。
使用dplyr
和tidyr
你可以尝试:
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.