C1:
AMT A B C D
1 13 0 1 0 0
2 17 0 0 1 0
3 19 0 0 0 1
4 1 0 0 1 0
5 9 0 1 0 0如何用ABCD计数频率AMT?
C2= t(as.matrix(C1[1])) %*% as.matrix(C1[2:5])它给出了一个按地区分列的总和的结果。
我想要的输出是把A,B,C,D组合在一起,因为它是二进制的,然后按类型计数频率。即。
AMT GROUP N
1 1 A 1
2 9 B 1
3 13 B 1
4 17 C 1
5 19 D 1
...
AMT IS NOT LIMITED TO 1 9 13 17 ... RANGE FROM 0-30res <- C1 %>% group_by( ) %>% summarise(Freq=n())发布于 2021-05-11 04:18:24
library(tidyverse)
C1 %>%
tidyr::pivot_longer(
cols = A:D,
names_to = "Names",
values_to = "Values",
) %>%
group_by(Names) %>%
filter(Values == 1) %>%
summarise(AMT = sum(AMT))
select(Names, AMT, -Values)输出:
Names AMT
<chr> <dbl>
1 B 22
2 C 18
3 D 19发布于 2021-05-11 04:23:15
您可以使用max.col获取列名,其中的值为1。
library(dplyr)
C1 %>%
transmute(AMT,
GROUP = names(.)[-1][max.col(select(., -1))],
N = 1) %>%
arrange(AMT) -> res
res
# AMT GROUP N
#4 1 C 1
#5 9 B 1
#1 13 B 1
#2 17 C 1
#3 19 D 1数据
C1 <- structure(list(AMT = c(13L, 17L, 19L, 1L, 9L), A = c(0L, 0L,
0L, 0L, 0L), B = c(1L, 0L, 0L, 0L, 1L), C = c(0L, 1L, 0L, 1L,
0L), D = c(0L, 0L, 1L, 0L, 0L)), class = "data.frame", row.names = c(NA, -5L))https://stackoverflow.com/questions/67480344
复制相似问题