首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用ABCD计数频率AMT?

如何用ABCD计数频率AMT?
EN

Stack Overflow用户
提问于 2021-05-11 03:52:43
回答 2查看 36关注 0票数 0
代码语言:javascript
复制
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?

代码语言:javascript
复制
C2= t(as.matrix(C1[1])) %*% as.matrix(C1[2:5])

它给出了一个按地区分列的总和的结果。

我想要的输出是把A,B,C,D组合在一起,因为它是二进制的,然后按类型计数频率。即。

代码语言:javascript
复制
  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-30
代码语言:javascript
复制
res <- C1 %>% group_by( ) %>% summarise(Freq=n())
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-11 04:18:24

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
  Names   AMT
  <chr> <dbl>
1 B        22
2 C        18
3 D        19
票数 1
EN

Stack Overflow用户

发布于 2021-05-11 04:23:15

您可以使用max.col获取列名,其中的值为1。

代码语言:javascript
复制
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

数据

代码语言:javascript
复制
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))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67480344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档