dplyr中操作新赋值变量的最佳方法?如何避免先赋值再调用
关于dplyr中对新赋值变量操作的最佳实践
嘿,我来帮你梳理下更简洁的写法!你现在的思路方向是对的,但确实有更优雅的方式来避免冗余代码:
1. 最直接的简化:利用赋值表达式的返回值
你原来的写法里多了一个不必要的df.3 %>%——其实(df.3 <- filter(df.1, !(Patient_ID %in% df.2)))这个表达式本身就会返回过滤后的数据集,所以直接把它传给count()就行:
# 既完成df.3的赋值,又直接输出count结果 (df.3 <- filter(df.1, !(Patient_ID %in% df.2))) %>% count(MIPSGroup)
2. 链式管道+按需赋值(更贴合tidyverse风格)
如果追求代码可读性,也可以根据需求调整写法:
- 若只需要最终的count结果,不需要保留过滤后的数据集:
df.1 %>% filter(!(Patient_ID %in% df.2)) %>% count(MIPSGroup)
- 若需要同时保留过滤后的
df.3并得到count结果,分开写的链式风格也很清晰(很多时候可读性比紧凑写法更重要):
df.3 <- df.1 %>% filter(!(Patient_ID %in% df.2)) df.3 %>% count(MIPSGroup)
3. 用赋值管道%<>%(来自magrittr)
如果你偏爱更紧凑的赋值+操作逻辑,可以用magrittr包的%<>%运算符(tidyverse已内置该包)。它会把管道处理后的结果赋值回原变量,但要注意这种方式会覆盖原变量,适合不需要保留原始中间数据集的场景:
# 先初始化df.3,或直接对目标变量操作 df.3 <- df.1 df.3 %<>% filter(!(Patient_ID %in% df.2)) %>% count(MIPSGroup) # 此时df.3会变成count后的统计结果,而非过滤后的原始数据集
总结一下:如果要同时保留过滤后的df.3和得到count结果,第一种括号赋值+管道的写法最简洁;如果更看重代码可读性,分开写链式赋值和count也完全没问题;如果不需要中间数据集,直接链式操作就好~
内容的提问来源于stack exchange,提问作者Carmen Sandoval
相关产品推荐
相关产品推荐

