R语言 根据两个以上的条件和其他数据为数据赋值

ie3xauqp  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(280)

我有一个数据框,如下所示

> df
   name time count
1     A   10     9
2     A   12    17
3     A   24    19
4     A    3    15
5     A   29    11
6     B   31    14
7     B    7     7
8     B   30    18
9     C   29    13
10    C   12    12
11    C    3    16
12    C    4     6

对于每个名称组(A、B、C),我需要按照以下规则分配一个类别:

  • 如果时间〈= 10,则类别= 1
  • 如果10
  • 如果20
  • 如果时间〉30,则类别= 4

这样的数据框:

> df_final
   name time count category
1     A   10     9        1
2     A   12    17        2
3     A   24    19        3
4     A    3    15        1
5     A   29    11        3
6     B   31    14        4
7     B    7     7        1
8     B   30    18        3
9     C   29    13        3
10    C   12    12        2
11    C    3    16        1
12    C    4     6        1

之后我需要根据它们的类别对count中的值求和。最终的数据框架应该看起来像这样:

> df_ultimate
   name count category
1     A    24        1
2     A    17        2
3     A    30        3
4     A    NA        4
5     B     7        1
6     B    NA        2
7     B    18        3
8     B    14        4
9     C    22        1
10    C    12        2
11    C    13        3
12    C    NA        4

我试过使用summarise和group_by,但没有太大的成功。
谢谢你的帮助

h4cxqtbf

h4cxqtbf1#

使用cut + complete

library(dplyr)
library(tidyr)
dat %>% 
  group_by(name, category = cut(time, breaks = c(-Inf, 10, 20, 30, Inf), labels = 1:4)) %>% 
  summarise(count = sum(count)) %>% 
  complete(category)

#  # Groups:   name [3]
#    name  category count
#  1 A     1           24
#  2 A     2           17
#  3 A     3           30
#  4 A     4           NA
#  5 B     1            7
#  6 B     2           NA
#  7 B     3           18
#  8 B     4           14
#  9 C     1           22
# 10 C     2           12
# 11 C     3           13
# 12 C     4           NA

相关问题