如何将 4 行数据帧转换为 R 中的 2*2 矩阵?
Posted
技术标签:
【中文标题】如何将 4 行数据帧转换为 R 中的 2*2 矩阵?【英文标题】:How to convert a 4 rows dataframe to 2*2 matrix in R? 【发布时间】:2021-11-10 18:59:25 【问题描述】:我有一个这样的数据框:
name number
A 287
B 1390
C 1595
D 369
我想得到一个像这样的数字数据矩阵:
287 369
1390 1595
按照这个顺序:
A D
B C
这意味着A和B在左列,D和C在右列。顺序很重要。 我怎样才能只用我想要的序列制作数字矩阵?谢谢!
【问题讨论】:
【参考方案1】:我们可以sort
'number' 列并使用matrix
创建矩阵
matrix(sort(df1$number), 2, 2,byrow = TRUE)
-输出
[,1] [,2]
[1,] 287 369
[2,] 1390 1595
或者如果需要基于'name'列
library(dplyr)
library(tidyr)
library(data.table)
df1 %>%
mutate(grp = 1 + !name %in% c("A", "D"), rn = rowid(grp),
name = NULL) %>%
pivot_wider(names_from = rn, values_from = number) %>%
select(-grp) %>%
as.matrix
-输出
1 2
[1,] 287 369
[2,] 1390 1595
数据
df1 <- structure(list(name = c("A", "B", "C", "D"), number = c(287L,
1390L, 1595L, 369L)), class = "data.frame", row.names = c(NA,
-4L))
【讨论】:
【参考方案2】:以下也是一种选择。
library(dplyr)
df %>%
filter(name %in% c('A', 'B')) %>%
bind_cols(filter(df, name %in% c('C', 'D'))) %>%
select(where(~is.integer(.))) %>%
as.matrix() %>%
unname()
# [,1] [,2]
# [1,] 287 1595
# [2,] 1390 369
数据
df <- structure(list(name = c("A", "B", "C", "D"), number = c(287L,
1390L, 1595L, 369L)), class = "data.frame", row.names = c(NA,
-4L))
【讨论】:
以上是关于如何将 4 行数据帧转换为 R 中的 2*2 矩阵?的主要内容,如果未能解决你的问题,请参考以下文章