You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在dplyr::filter函数中使用paste0出现0行结果问题求助

问题原因及解决办法

你的代码返回0行是因为直接拿字符串和数值做比较:paste0(Pval_time_hours)生成的是字符串"Pval_time_hours8h",R会把0.05转换成字符串后按字符顺序对比,结果全为FALSE,所以filter没有筛选出任何行。

下面是三种可行的解决方式:

方法1:使用.data pronoun引用列

这是dplyr推荐的通过字符串引用列的方式,简洁直观:

sig_time_hours_results1 <- data.frame (ID  = c("value_1", "value_2", "value3", "value4"),
                  Pval_time_hours8h = c(1.00, 0.005, 0.006, 0.2)
                  )

hour = "8h" 
Pval_time_hours <- paste0("Pval_time_hours", hour)
sig_time_hours_results2 <- dplyr::filter(sig_time_hours_results1, .data[[Pval_time_hours]] < 0.05)

方法2:结合across函数

适合需要同时处理多列的场景,单列也适用:

sig_time_hours_results2 <- dplyr::filter(sig_time_hours_results1, across(all_of(Pval_time_hours), ~ .x < 0.05))

方法3:使用rlang的非标准求值

通过把字符串转换成符号再求值,是常用的动态列引用方式:

library(rlang)
sig_time_hours_results2 <- dplyr::filter(sig_time_hours_results1, !!sym(Pval_time_hours) < 0.05)

运行以上任意一种方法,都会得到预期的2行结果:

ID Pval_time_hours8h
1 value_2             0.005
2  value3             0.006

内容的提问来源于stack exchange,提问作者Batsi-2015

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 03:01:00