gpt4 book ai didi

r - 如何根据列中的级别对重复值求和并输出计数表?

转载 作者:行者123 更新时间:2023-12-04 21:04:09 28 4
gpt4 key购买 nike

我是 R 的新手,我的数据看起来像这样:

categories <- c("A","B","C","A","A","B","C","A","B","C","A","B","B","C","C")
animals <- c("cat","cat","cat","dog","mouse","mouse","rabbit","rat","shark","shark","tiger","tiger","whale","whale","worm")
dat <- cbind(categories,animals)

有些动物根据类别重复。例如,“cat”出现在所有三个类别 A、B 和 C 中。

我喜欢我的新数据帧输出看起来像这样:
A   B   C   count
1 1 1 1
1 1 0 2
1 0 1 0
0 1 1 2
1 0 0 2
0 1 0 0
0 0 1 2
0 0 0 0

A、B 和 C 下的数字 1 表示该动物出现在该类别中,0 表示该动物未出现在该类别中。例如,第一行在所有三个类别中都有 1。第一行的计数为 1,因为“猫”是每个类别中唯一重复自身的动物。

R中是否有一个功能可以帮助我实现这一目标?先感谢您。

最佳答案

我们可以使用 table创建 categories 的交叉表和 animals , 转置, 转换为 data.frame, group_by全部 categories并计算每个组合的频率:

library(dplyr)
library(tidyr)

as.data.frame.matrix(t(table(dat))) %>%
group_by_all() %>%
summarize(Count = n())

结果:
# A tibble: 5 x 4
# Groups: A, B [?]
A B C Count
<int> <int> <int> <int>
1 0 0 1 2
2 0 1 1 2
3 1 0 0 2
4 1 1 0 2
5 1 1 1 1

编辑 (感谢@C. Braun)。以下是如何还包括零 A、B、C 组合:
as.data.frame.matrix(t(table(dat))) %>%
bind_rows(expand.grid(A = c(0,1), B = c(0,1), C = c(0,1))) %>%
group_by_all() %>%
summarize(Count = n()-1)

或与 complete ,正如@Ryan 所建议的:
as.data.frame.matrix(t(table(dat))) %>%
mutate(non_missing = 1) %>%
complete(A, B, C) %>%
group_by(A, B, C) %>%
summarize(Count = sum(ifelse(is.na(non_missing), 0, 1)))

结果:
# A tibble: 8 x 4
# Groups: A, B [?]
A B C Count
<dbl> <dbl> <dbl> <dbl>
1 0 0 0 0
2 0 0 1 2
3 0 1 0 0
4 0 1 1 2
5 1 0 0 2
6 1 0 1 0
7 1 1 0 2
8 1 1 1 1

关于r - 如何根据列中的级别对重复值求和并输出计数表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50685593/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com