R 组内的条件语句
我有一个dataframe,我想在其中创建一个新列,其中包含基于组内条件的值。对于下面的数据框,我想创建一个新的列n_actions,它给出 条件1。对于整个组,如果列步骤中出现6,则数字2 条件2。对于整个组,如果列步骤中出现9,则数字为3 条件3。如果组的列步骤中没有出现6或9,则为1R 组内的条件语句,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 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