R 使用更多条件筛选名称
我需要对一个大数据集执行以下步骤,我尝试使用R 使用更多条件筛选名称,r,filter,R,Filter,我需要对一个大数据集执行以下步骤,我尝试使用filter,但无法正确实现我的预期 在我下面的数据示例中,有四列:subject,block number,US,stimultium subject block number US stimulus 1 subject1 3 0 S10 2 subject1 3 1 S1 3 subject1 4 0 S10 4 subject1
filter
,但无法正确实现我的预期
在我下面的数据示例中,有四列:subject
,block number
,US
,stimultium
subject block number US stimulus
1 subject1 3 0 S10
2 subject1 3 1 S1
3 subject1 4 0 S10
4 subject1 4 0 S7
5 subject1 4 1 S1
6 subject1 4 0 S8
US==1
在block number==3
中,则stimulation
变为'CS+
;如果US==0
在block number==3
中,则刺激变为'CS-'
S10==CS+
在块号==3
中,则S10
在其他块号中也==CS+
。其他刺激方案的名称保持不变
块号==3
中刺激的名称,但我不知道如何将其推广到其他块号
structure(list(subject = c("subject1", "subject1", "subject1",
"subject1", "subject1", "subject1"), `block number` = c(3L, 3L,
4L, 4L, 4L, 4L), US = c(0L, 1L, 0L, 0L, 1L, 0L), stimulus = c("S10",
"S1", "S10", "S7", "S1", "S8")), row.names = c(NA, -6L), class = c("data.table",
"data.frame"), .internal.selfref = <pointer: 0x00000261ebfe1ef0>)
修订情景
data %>% group_by(subject, stimulus) %>%
mutate(dummy = sum(`block number` == 3 & US == 1)) %>%
ungroup() %>% group_by(subject) %>%
mutate(new_stimulus = case_when(`block number` == 3 & dummy == max(dummy) ~ 'US+',
`block number` == 3 ~ 'US-',
TRUE ~ stimulus)) %>%
group_by(subject, stimulus) %>%
mutate(new_stimulus = ifelse(min(new_stimulus == stimulus) < 1, new_stimulus, stimulus)) %>%
ungroup()
# A tibble: 8 x 6
subject `block number` US stimulus dummy new_stimulus
<chr> <int> <int> <chr> <int> <chr>
1 subject1 3 1 S10 2 US+
2 subject1 3 1 S10 2 US+
3 subject1 3 1 S1 1 US-
4 subject1 3 0 S1 1 US-
5 subject1 4 0 S10 2 US+
6 subject1 4 0 S7 0 S7
7 subject1 4 1 S1 1 US-
8 subject1 4 0 S8 0 S8
data %>% mutate(new_stimulus = case_when(`block number` == 3 & US == 1 ~ 'CS+',
`block number` == 3 & US == 0 ~ 'CS-',
TRUE ~ stimulus)) %>%
group_by(subject, stimulus) %>%
mutate(new_stimulus = ifelse(min(new_stimulus == stimulus) < 1, new_stimulus, stimulus)) %>%
ungroup()
# A tibble: 6 x 5
subject `block number` US stimulus new_stimulus
<chr> <int> <int> <chr> <chr>
1 subject1 3 0 S10 CS-
2 subject1 3 1 S1 CS+
3 subject1 4 0 S10 CS-
4 subject1 4 0 S7 S7
5 subject1 4 1 S1 CS+
6 subject1 4 0 S8 S8
@AnilGoyal是的,在真实数据中,我有许多块编号。在所有其他块号中,我有许多不同的刺激,而在块号3中,只有2个刺激,我需要根据块号3中的条件将这两个刺激的名称更改为所有块号。@AnilGoyal很抱歉,我将最小化数据样本。很抱歉,我还想问一下,如果我需要一个标准,我能做些什么:“CS+”如果“我们的人数==1>我们的人数==0”?e、 例如,如果S10==1两次,S1==1一次,那么S10==CS+,你能用一个例子详细说明一下吗?我已经更新了我的问题。请参见编辑。它应该能工作!!非常感谢你的帮助!!
data %>% group_by(subject, stimulus) %>%
mutate(dummy = sum(`block number` == 3 & US == 1)) %>%
ungroup() %>% group_by(subject) %>%
mutate(new_stimulus = case_when(`block number` == 3 & dummy == max(dummy) ~ 'US+',
`block number` == 3 ~ 'US-',
TRUE ~ stimulus)) %>%
group_by(subject, stimulus) %>%
mutate(new_stimulus = ifelse(min(new_stimulus == stimulus) < 1, new_stimulus, stimulus)) %>%
ungroup()
# A tibble: 8 x 6
subject `block number` US stimulus dummy new_stimulus
<chr> <int> <int> <chr> <int> <chr>
1 subject1 3 1 S10 2 US+
2 subject1 3 1 S10 2 US+
3 subject1 3 1 S1 1 US-
4 subject1 3 0 S1 1 US-
5 subject1 4 0 S10 2 US+
6 subject1 4 0 S7 0 S7
7 subject1 4 1 S1 1 US-
8 subject1 4 0 S8 0 S8
data %>% mutate(new_stimulus = case_when(`block number` == 3 & US == 1 ~ 'CS+',
`block number` == 3 & US == 0 ~ 'CS-',
TRUE ~ stimulus)) %>%
group_by(subject, stimulus) %>%
mutate(new_stimulus = ifelse(min(new_stimulus == stimulus) < 1, new_stimulus, stimulus)) %>%
ungroup()
# A tibble: 6 x 5
subject `block number` US stimulus new_stimulus
<chr> <int> <int> <chr> <chr>
1 subject1 3 0 S10 CS-
2 subject1 3 1 S1 CS+
3 subject1 4 0 S10 CS-
4 subject1 4 0 S7 S7
5 subject1 4 1 S1 CS+
6 subject1 4 0 S8 S8