在dplyr::filter函数中使用paste0

31moq8wy  于 2022-12-20  发布在  其他
关注(0)|答案(2)|浏览(157)

我在使用dplyr::filter函数中的paste0时遇到了一些问题,希望得到一些帮助。我粘贴了下面的代码。当我运行它时,我得到的结果是0行而不是2行。

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, paste0(Pval_time_hours) < 0.05)
bqjvbblv

bqjvbblv1#

我们可以将.data[[一起使用

dplyr::filter(sig_time_hours_results1, .data[[Pval_time_hours]] < 0.05)
  • 输出
ID Pval_time_hours8h
1 value_2             0.005
2  value3             0.006
bf1o4zei

bf1o4zei2#

在使用字符串作为列名时需要更加小心。不能只使用'paste0()将字符串转换为列名。一种方法是使用tidyseselector。例如

sig_time_hours_results2 <- sig_time_hours_results1 |> 
    filter(if_all(Pval_time_hours, ~.x < 0.05))

即使我们只检查一列,我们仍然使用if_all来确保过滤器有效。

相关问题