R语言新手求助:管道中filter函数未输出预期过滤结果
问题:tidyverse管道输出不符合预期(R语言新手求助)
我是R语言新手,使用tidyverse包的管道操作时遇到输出问题。已安装并加载tidyverse包,我的代码如下:
(filtered_toothgrowth <- ToothGrowth) %>% filter(dose==0.5) %>% group_by(supp)%>% summarize(mean_len = mean(len,na.rm = T), .group="drop")
我在第一行加括号是因为不加就无法在控制台打印结果。当前输出是一个汇总后的tibble,但我预期应该是dose=0.5的过滤后表格,怀疑filter函数有问题。试过移除括号但无法打印,用arrange函数时filter能正常工作,但添加后续步骤后就不符合预期了。
当前输出
# A tibble: 2 × 3 supp mean_len .group <fct> <dbl> <chr> 1 OJ 13.2 drop 2 VC 7.98 drop
预期输出
len supp dose 1 4.2 VC 0.5 2 5.2 VC 0.5 3 5.8 VC 0.5 4 6.4 VC 0.5 5 7.0 VC 0.5 6 7.3 VC 0.5 7 8.2 OJ 0.5 8 9.4 OJ 0.5 9 9.7 OJ 0.5 10 9.7 OJ 0.5 11 10.0 VC 0.5 12 10.0 OJ 0.5 13 11.2 VC 0.5 14 11.2 VC 0.5 15 11.5 VC 0.5 16 14.5 OJ 0.5 17 15.2 OJ 0.5 18 16.5 OJ 0.5 19 17.6 OJ 0.5 20 21.5 OJ 0.5
解答
问题不在filter函数,是你多写了group_by()和summarize()步骤——这两个函数是用来分组计算统计值的,所以最后执行的是汇总操作,输出自然是统计结果,不是过滤后的原始数据。
要得到预期的过滤后表格,只需保留过滤步骤即可,有两种实现方式:
方式1:分开赋值与打印
# 先赋值 filtered_toothgrowth <- ToothGrowth %>% filter(dose == 0.5) # 再打印结果 filtered_toothgrowth
方式2:括号包裹赋值语句(同时完成赋值与打印)
(filtered_toothgrowth <- ToothGrowth %>% filter(dose == 0.5))
这样就能得到你想要的dose=0.5的过滤后完整表格了。
内容的提问来源于stack exchange,提问作者Alex Ventura
相关产品推荐
相关产品推荐

