Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用更多条件筛选名称_R_Filter - Fatal编程技术网

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
  • 对于每个受试者(我仅以受试者1的数据为例),如果
    US==1
    block number==3
    中,则
    stimulation
    变为
    'CS+
    ;如果
    US==0
    block number==3
    中,则刺激变为
    'CS-'

  • 我需要把这个应用到所有区块的刺激上。例如,如果对于受试者1,
    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