如何在r dplyr中取消筛选或清除筛选?

如何在r dplyr中取消筛选或清除筛选?,r,filter,dplyr,mutate,R,Filter,Dplyr,Mutate,图中显示了我试图实现的目标: 社区你好。我试图根据一个特定组(过滤和分组)的平均函数来变异一个新变量。当我尝试创建新变量时,我将集合解组以在所有组中操作。我试着运行这个R代码。 但是,mutate函数仅适用于已筛选的组,无法找到未筛选的函数。I dput()下面是我的数据帧样本(df01)。非常感谢您的所有意见和建议。当做M R代码: df01 %>% #summary table of the means to be used. filter(GFPimg == "WT") %&

图中显示了我试图实现的目标:

社区你好。我试图根据一个特定组(过滤和分组)的平均函数来变异一个新变量。当我尝试创建新变量时,我将集合解组以在所有组中操作。我试着运行这个R代码。 但是,mutate函数仅适用于已筛选的组,无法找到未筛选的函数。I dput()下面是我的数据帧样本(df01)。非常感谢您的所有意见和建议。当做M

R代码

df01 %>% #summary table of the means to be used. 
  filter(GFPimg == "WT") %>% 
  group_by(Demineralization, Cond, Temp) %>%  
  summarise(Mean2 = mean(Mean)) %>% 
  arrange(desc(Demineralization))
  print() 

df01 %>%
  filter(GFPimg == "WT") %>% 
  group_by(Demineralization, Cond, Temp) %>% 
  mutate(mean2 = mean(Mean)) %>% 
  arrange(desc(Demineralization, Cond)) %>% 
  ungroup() %>% 
  group_by(Demineralization, Cond) %>%
  mutate(submean = Mean - mean2) %>% 
  print(n=200) 
df01 %>%
  group_by(Demineralization, Cond, Temp) %>% 
  mutate(Mean2 = mean(ifelse(GFPimg == 'WT', Mean, NA), na.rm=T)) %>% 
  ungroup() %>% 
  mutate(submean = Mean - Mean2) %>% 
  print(n=200) 
数据帧样本df01
df01因为其他用户可能会有类似的问题,所以我将我得到的答案发布到这里

经验教训:

  • 管道操作符(%%>%)从中传递修改后的数据帧 将上一个操作转换为下一个操作
  • Subset()和filter()有效地生成了一个新的数据帧,以保持 只有满足条件的行,并删除所有其他行 排
  • dplyr中没有取消筛选或清除筛选或取消子集的功能。而是保留所有行并对另一个特定行执行计算 子集,可以使用ifelse()应用条件
  • 解决我问题的代码

    df01 %>% #summary table of the means to be used. 
      filter(GFPimg == "WT") %>% 
      group_by(Demineralization, Cond, Temp) %>%  
      summarise(Mean2 = mean(Mean)) %>% 
      arrange(desc(Demineralization))
      print() 
    
    df01 %>%
      filter(GFPimg == "WT") %>% 
      group_by(Demineralization, Cond, Temp) %>% 
      mutate(mean2 = mean(Mean)) %>% 
      arrange(desc(Demineralization, Cond)) %>% 
      ungroup() %>% 
      group_by(Demineralization, Cond) %>%
      mutate(submean = Mean - mean2) %>% 
      print(n=200) 
    
    df01 %>%
      group_by(Demineralization, Cond, Temp) %>% 
      mutate(Mean2 = mean(ifelse(GFPimg == 'WT', Mean, NA), na.rm=T)) %>% 
      ungroup() %>% 
      mutate(submean = Mean - Mean2) %>% 
      print(n=200) 
    

    R和Excel不同,在Excel中,您可以单击过滤器,然后再将其松开。管道操作符(%>%)所做的是将一个修改后的数据帧从上一个操作传递到下一个操作。执行subset()操作时,实际上是在生成一个新的数据帧,该数据帧只保留满足条件的行,并删除所有其他行。如果必须保留前几行,则必须将中间结果保存在其他变量中。另外,最好使用ifelse()只选择那些符合条件的值来计算mean(),而不是在这种情况下使用subset()。@user2332849,
    subset()
    在哪里?我没看到…@user2332849。非常感谢您的评论。因此,我应该使用ifelse()来代替filter(),或者是subset()和ifelse()的组合……?对不起,subset()像filter()函数一样进行筛选。如果使用subset()或filter(),所有与条件不匹配的记录都将永久删除。如果您想保留它们并只对另一个特定子集执行计算,可以使用ifelse()应用条件。Ex:mean(如果其他(GFPimg='WT',mean,NA),NA.rm=T)这将用NA替换GFPimg不是'WT'的所有值,然后在计算平均值之前将其删除。