如何解决宽到长的二进制矩阵相加计数
我想从宽格式变为长格式,但保留计数值并分解列。我有这个:
variable LF1 LF2 LF3 LF4 LF5 Counts
A 1 0 0 0 0 5
A 1 0 1 0 0 1
B 1 0 0 1 0 3
B 1 0 0 0 1 2
B 1 0 0 0 0 1
C 1 0 0 0 0 8
D 1 1 0 0 0 6
D 1 0 1 0 0 4
我想要以下内容:
variable factor count
A F1 6
A F3 1
B F1 6
B F4 3
B F5 2
C F1 8
D F1 10
D F2 6
D F3 4
这意味着数据在汇总计数时同时转换为 long。 我在 reshape2 中尝试了所有我能想到的组合,但我没有想法,例如
data_grouped <- reshape2::melt(data,id.vars=c("variable"))
data_grouped <- reshape2::melt(data,id.vars=c("variable","LF1","LF2","LF3","LF4","LF5"))
我还看到通过连接以下内容可以得到类似的结果:
data %>% group_by(variable,LF1) %>% summarise(sum(counts))
data %>% group_by(variable,LF2) %>% summarise(sum(counts))
但这效率非常低,而且不是理想的解决方案,因此我非常感谢您的帮助。
解决方法
假设您的数据名为 df
:
library(tidyverse)
df %>%
pivot_longer(cols = starts_with("LF"),names_to = "factor") %>%
filter(value == 1) %>%
group_by(variable,factor) %>%
summarize(count = sum(Counts)) %>%
mutate(factor = str_remove(factor,"L")) %>%
ungroup()
给出:
# A tibble: 9 x 3
variable factor count
<chr> <chr> <int>
1 A F1 6
2 A F3 1
3 B F1 6
4 B F4 3
5 B F5 2
6 C F1 8
7 D F1 10
8 D F2 6
9 D F3 4
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。