r - 总结一个逻辑矩阵
问题描述
我有一个大矩阵,每列下都填充了真/假值。有没有办法可以总结矩阵,以便每一行都是唯一的,并且我有一个新列,其中包含该行出现频率的总和。
例子:
A B C D E
[1] T F F T F
[2] T T T F F
[3] T F F T T
[4] T T T F F
[5] T F F T F
会成为:
A B C D E total
[1] T F F T F 2
[2] T T T F F 2
[3] T F F T F 1
编辑
我将这个矩阵与一个新列rev绑定,所以我现在有一个看起来像的 data.frame
A B C D E rev
[1] T F F T F 2
[2] T T T F F 3
[3] T F F T T 5
[4] T T T F F 2
[5] T F F T F 1
并且想要一个 data.frame 也将 rev 列汇总如下:
A B C D E rev total
[1] T F F T F 3 2
[2] T T T F F 5 2
[3] T F F T T 5 1
解决方案
一种方法dplyr
:
如果您as.data.frame
从. 最后,您无论如何都需要一个,因为您将同时拥有和在您的桌子上。as_tibble
matrix
data.frame
numeric
logical
mat <- matrix(
c(T, F, F, T, F, T, T, T, F, F, T, F, F, T, T, T, T, T, F, F, T, F, F, T, F),
ncol = 5,
byrow = TRUE,
dimnames = list(NULL, LETTERS[1:5])
)
library(dplyr)
mat %>%
as_tibble %>% # convert matrix to tibble, to be able to group
group_by_all %>% # group by every column so we can count by group of equal values
tally %>% # tally will add a count column and keep distinct grouped values
ungroup # ungroup the table to be clean
#> # A tibble: 3 x 6
#> A B C D E n
#> <lgl> <lgl> <lgl> <lgl> <lgl> <int>
#> 1 TRUE FALSE FALSE TRUE FALSE 2
#> 2 TRUE FALSE FALSE TRUE TRUE 1
#> 3 TRUE TRUE TRUE FALSE FALSE 2
由reprex 包(v0.2.0)于 2018 年 5 月 29 日创建。
和一个基本的解决方案:
df <- as.data.frame(mat)
df$n <- 1
aggregate(n~.,df,sum)
# A B C D E n
# 1 TRUE TRUE TRUE FALSE FALSE 2
# 2 TRUE FALSE FALSE TRUE FALSE 2
# 3 TRUE FALSE FALSE TRUE TRUE 1
或作为一个班轮:aggregate(n~.,data.frame(mat,n=1),sum)
推荐阅读
- calendar - 为什么从公元 1 年到 2001 年 1 月 1 日的日历日总和与热带日相差 3?
- java - 如何制作列表类型对象的副本(深拷贝)
- > 按价值?
- linq - F# List.partition 的 LINQ 等效项
- php - SQL 返回多个表
- partitioning - buildroot 中的附加分区
- c++ - 多重继承导致虚假的模糊虚函数重载
- excel - 使用 VBA 在 Excel 中基于当前年份的动态下拉列表
- scala - 使用 mockito 对 Scala 进行单元测试
- powershell - New-NetIPAddress 参数“-IPAddress”导致“语句块或类型定义中缺少关闭 '}'”错误
- hadoop - 有没有办法为 Hive 中的表提供“第二个名称”,以便用户可以引用表的任一名称并检索相同的内容?