首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于计数的group_by表r数据计算

基于计数的group_by表r数据计算
EN

Stack Overflow用户
提问于 2022-07-26 17:35:42
回答 2查看 58关注 0票数 1
代码语言:javascript
复制
group = c(1,1,4,4,4,5,5,6,1,4,6,1,1,1,1,6,4,4,4,4,1,4,5,6)
animal = c('a','b','c','c','d','a','b','c','b','d','c','a','a','a','a','c','c','c','c','c','a','c','a','c')
sleep = c('y','n','y','y','y','n','n','y','n','y','n','y','y','n','m','y','n','n','n','n',NA, NA, NA, NA)

test = data.frame(group, animal, sleep)
print(test)

group_animal = test %>% group_by(`group`, `animal`) %>% count(sleep)
print(group_animal)

我想将测试df睡眠列中的NA值替换为基于组和动物的睡眠答案的最高计数。

这样,在睡眠列中有NAs的第1组动物a的睡眠值应该是'y‘,因为这是第1组动物a中计数最高的值。

第4组有NAs睡眠的动物c也应以“n”作为睡眠值。

EN

回答 2

Stack Overflow用户

发布于 2022-07-26 17:49:23

现在用group_by(group, animal) thnx @Quinten更新,删除先前的答案:

  1. animal
  2. replace_na与替换参数一起使用为sleep[n==max(n)]
  3. 新的:在像第5组那样的情况下,添加!is.na(sleep)以避免冲突:
代码语言:javascript
复制
library(dplyr)
library(tidyr)

group_animal %>%
    group_by(group, animal) %>% 
    arrange(desc(sleep), .by_group = TRUE) %>% 
    mutate(sleep = replace_na(sleep, sleep[n==max(n) & !is.na(sleep)])) 
代码语言:javascript
复制
  group animal sleep     n
   <dbl> <chr>  <chr> <int>
 1     1 a      y         3
 2     1 a      n         1
 3     1 a      m         1
 4     1 a      y         1
 5     1 b      n         2
 6     4 c      y         2
 7     4 c      n         4
 8     4 c      n         1
 9     4 d      y         2
10     5 a      n         1
11     5 a      n         1
12     5 b      n         1
13     6 c      y         2
14     6 c      n         1
15     6 c      y         1
票数 3
EN

Stack Overflow用户

发布于 2022-07-26 18:12:28

尝尝这个。

此方法必需创建一个自定义列来与睡眠合并,它根据从str_count获得的最大计数值来设置睡眠。

代码语言:javascript
复制
library(dplyr)

test |> 
  group_by(group, animal) |> 
  mutate(sleep = coalesce(sleep, sleep[max(stringr::str_count(paste(sleep, collapse = ""), pattern = sleep), na.rm = TRUE)])) |>
  ungroup()
代码语言:javascript
复制
   group animal sleep
1      1      a     y
2      1      b     n
3      4      c     y
4      4      c     y
5      4      d     y
6      5      a     n
7      5      b     n
8      6      c     y
9      1      b     n
10     4      d     y
11     6      c     n
12     1      a     y
13     1      a     y
14     1      a     n
15     1      a     m
16     6      c     y
17     4      c     n
18     4      c     n
19     4      c     n
20     4      c     n
21     1      a     y
22     4      c     n
23     5      a     n
24     6      c     n
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73127564

复制
相关文章

相似问题

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