如何在r dplyr中取消筛选或清除筛选?
图中显示了我试图实现的目标: 社区你好。我试图根据一个特定组(过滤和分组)的平均函数来变异一个新变量。当我尝试创建新变量时,我将集合解组以在所有组中操作。我试着运行这个R代码。 但是,mutate函数仅适用于已筛选的组,无法找到未筛选的函数。I dput()下面是我的数据帧样本(df01)。非常感谢您的所有意见和建议。当做M R代码:如何在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") %&
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'的所有值,然后在计算平均值之前将其删除。