R 组内的条件语句

R 组内的条件语句,r,dataframe,group-by,conditional,R,Dataframe,Group By,Conditional,我有一个dataframe,我想在其中创建一个新列,其中包含基于组内条件的值。对于下面的数据框,我想创建一个新的列n_actions,它给出 条件1。对于整个组,如果列步骤中出现6,则数字2 条件2。对于整个组,如果列步骤中出现9,则数字为3 条件3。如果组的列步骤中没有出现6或9,则为1 #dataframe start dataframe <- data.frame(group = c("A", "A", "A", "B", "B", "B", "B", "B", "B", "C",

我有一个dataframe,我想在其中创建一个新列,其中包含基于组内条件的值。对于下面的数据框,我想创建一个新的列n_actions,它给出

条件1。对于整个组,如果列步骤中出现6,则数字2 条件2。对于整个组,如果列步骤中出现9,则数字为3 条件3。如果组的列步骤中没有出现6或9,则为1

#dataframe start
dataframe <- data.frame(group = c("A", "A", "A", "B", "B", "B", "B", "B", "B", "C", "C", "C", "D", "D", "D", "D", "D", "D", "D", "D", "D"),
               step = c(1, 2, 3, 1, 2, 3, 4, 5, 6, 1, 2, 3, 1, 2, 3, 4, 5, 6, 7, 8, 9))

# dataframe desired
dataframe$n_actions <- c(rep(1, 3), rep(2, 6,), rep(1, 3), rep(3, 9))
#数据帧开始

数据帧似乎可以将每组的最大值除以
%/%3

dataframe <- transform(dataframe,
                       n_actions2 = ave(step, group, FUN = function(x) max(x) %/% 3))
dataframe
#   group step n_actions n_actions2
#1      A    1         1          1
#2      A    2         1          1
#3      A    3         1          1
#4      B    1         2          2
#5      B    2         2          2
#6      B    3         2          2
#7      B    4         2          2
#8      B    5         2          2
#9      B    6         2          2
#10     C    1         1          1
#11     C    2         1          1
#12     C    3         1          1
#13     D    1         3          3
#14     D    2         3          3
#15     D    3         3          3
#16     D    4         3          3
#17     D    5         3          3
#18     D    6         3          3
#19     D    7         3          3
#20     D    8         3          3
#21     D    9         3          3

dataframe似乎可以将每组的最大值除以
%/%3

dataframe <- transform(dataframe,
                       n_actions2 = ave(step, group, FUN = function(x) max(x) %/% 3))
dataframe
#   group step n_actions n_actions2
#1      A    1         1          1
#2      A    2         1          1
#3      A    3         1          1
#4      B    1         2          2
#5      B    2         2          2
#6      B    3         2          2
#7      B    4         2          2
#8      B    5         2          2
#9      B    6         2          2
#10     C    1         1          1
#11     C    2         1          1
#12     C    3         1          1
#13     D    1         3          3
#14     D    2         3          3
#15     D    3         3          3
#16     D    4         3          3
#17     D    5         3          3
#18     D    6         3          3
#19     D    7         3          3
#20     D    8         3          3
#21     D    9         3          3
dataframe尝试:

library(dplyr)
dataframe %>% 
        group_by(group) %>%
        mutate(n_actions = ifelse(9 %in% step, 3, 
                                  ifelse(6 %in% step, 2, 1)))
# A tibble: 21 x 3
# Groups:   group [4]
    group  step n_actions
   <fctr> <dbl>     <dbl>
 1      A     1         1
 2      A     2         1
 3      A     3         1
 4      B     1         2
 5      B     2         2
 6      B     3         2
 7      B     4         2
 8      B     5         2
 9      B     6         2
10      C     1         1
# ... with 11 more rows
库(dplyr)
数据帧%>%
分组依据(分组)%>%
变异(n_actions=ifelse)(步骤3中的9%,
ifelse(步骤%2,1中的6%))
#一个tibble:21x3
#分组:分组[4]
组步骤n_操作
一一一一
2 A 2 1
3 A 3 1
4 B 1 2
5 B 2 2
6 B 3 2
7 B 4 2
8 B 5 2
9 B 6 2
10C11
# ... 还有11行
尝试:

library(dplyr)
dataframe %>% 
        group_by(group) %>%
        mutate(n_actions = ifelse(9 %in% step, 3, 
                                  ifelse(6 %in% step, 2, 1)))
# A tibble: 21 x 3
# Groups:   group [4]
    group  step n_actions
   <fctr> <dbl>     <dbl>
 1      A     1         1
 2      A     2         1
 3      A     3         1
 4      B     1         2
 5      B     2         2
 6      B     3         2
 7      B     4         2
 8      B     5         2
 9      B     6         2
10      C     1         1
# ... with 11 more rows
库(dplyr)
数据帧%>%
分组依据(分组)%>%
变异(n_actions=ifelse)(步骤3中的9%,
ifelse(步骤%2,1中的6%))
#一个tibble:21x3
#分组:分组[4]
组步骤n_操作
一一一一
2 A 2 1
3 A 3 1
4 B 1 2
5 B 2 2
6 B 3 2
7 B 4 2
8 B 5 2
9 B 6 2
10C11
# ... 还有11行

另一种使用
dplyr
case\u的方式,当
时:

library(dplyr)

dataframe %>% 
  group_by(group) %>%
  mutate(
    n_actions1 = case_when(
      9 %in% step ~ 3,
      6 %in% step ~ 2,
      TRUE ~ 1
    )
  )
输出:

# A tibble: 21 x 3
# Groups:   group [4]
   group  step n_actions
   <fct> <dbl>     <dbl>
 1 A         1         1
 2 A         2         1
 3 A         3         1
 4 B         1         2
 5 B         2         2
 6 B         3         2
 7 B         4         2
 8 B         5         2
 9 B         6         2
10 C         1         1
11 C         2         1
12 C         3         1
13 D         1         3
14 D         2         3
15 D         3         3
16 D         4         3
17 D         5         3
18 D         6         3
19 D         7         3
20 D         8         3
21 D         9         3
#一个tible:21x3
#分组:分组[4]
组步骤n_操作
一一一一
2 A 2 1
3 A 3 1
4 B 1 2
5 B 2 2
6 B 3 2
7 B 4 2
8 B 5 2
9 B 6 2
10C11
11 C 2 1
12 C 3 1
13 D 1 3
14 D 2 3
15 D 3 3
16 D 4 3
17 D 5 3
18 D 6 3
19 D 7 3
20 D 8 3
21 D 9 3

另一种使用
dplyr
case\u的方式,当
时:

library(dplyr)

dataframe %>% 
  group_by(group) %>%
  mutate(
    n_actions1 = case_when(
      9 %in% step ~ 3,
      6 %in% step ~ 2,
      TRUE ~ 1
    )
  )
输出:

# A tibble: 21 x 3
# Groups:   group [4]
   group  step n_actions
   <fct> <dbl>     <dbl>
 1 A         1         1
 2 A         2         1
 3 A         3         1
 4 B         1         2
 5 B         2         2
 6 B         3         2
 7 B         4         2
 8 B         5         2
 9 B         6         2
10 C         1         1
11 C         2         1
12 C         3         1
13 D         1         3
14 D         2         3
15 D         3         3
16 D         4         3
17 D         5         3
18 D         6         3
19 D         7         3
20 D         8         3
21 D         9         3
#一个tible:21x3
#分组:分组[4]
组步骤n_操作
一一一一
2 A 2 1
3 A 3 1
4 B 1 2
5 B 2 2
6 B 3 2
7 B 4 2
8 B 5 2
9 B 6 2
10C11
11 C 2 1
12 C 3 1
13 D 1 3
14 D 2 3
15 D 3 3
16 D 4 3
17 D 5 3
18 D 6 3
19 D 7 3
20 D 8 3
21 D 9 3

谢谢,这是聪明的思考:)谢谢,这是聪明的思考:)这没有给出所需的输出<%step
中的代码>9%需要放在第一位这不会提供所需的输出<%step
中的code>9%需要放在第一位这会产生一个
错误:“match”需要向量参数
错误。有什么想法吗?这对我很有吸引力。此外,这种方法非常灵活。我选择这一个作为我的最终目标solution@VivekKalyanarangan,抱歉,没有线索,我第一次在上述函数中看到此错误。@arg0naut我使用的是
dplyr==0.5.0
R版本3.3.2(2016-10-31)平台:x86_64-apple-darwin13.4.0(64位)在:macOS 10.14.1下运行会出现
错误:“match”需要向量参数
错误。有什么想法吗?这对我很有吸引力。此外,这种方法非常灵活。我选择这一个作为我的最终目标solution@VivekKalyanarangan,抱歉,没有线索,我第一次在上述函数中看到此错误。@arg0naut我使用的是
dplyr==0.5.0
R版本3.3.2(2016-10-31)平台:x86_64-apple-darwin13.4.0(64位),运行于:macOS 10.14.1