首页 > 解决方案 > 如何根据单行数据框中的列中的值使用 dplyr select 对列进行子集化

问题描述

我有一个单行数据框:

df <- structure(list(who = "Tom", who2 = "Tom", who3 = "Harry", how_many = 48, 
                 reserve = "Mary"), class = c("tbl_df", "tbl", "data.frame"
                 ), row.names = c(NA, -1L))

# A tibble: 1 x 5
  who   who2  who3  how_many reserve
  <chr> <chr> <chr>    <dbl> <chr>  
1 Tom   Tom   Harry       48 Mary   

我想按条件对列进行子集化,但出现错误: Error: condition must be a logical, not list来自下面的代码。

df %>% 
 if_else(who == who2, select(who3), select(how_many, reserve))

我想我明白为什么我会收到错误 - 如果有超过 1 行,此代码将无效,但想不出另一种方法如何在一系列dplyr管道函数中执行此操作。

标签: rdplyr

解决方案


一种方法是将数据传输到表达式块中,然后运行更多标准代码以有条件地选择您想要的列。

df %>% {if (pull(., who )==pull(., who2 )) {
  select(., who3)
} else {
  select(., how_many, reserve)
}}

推荐阅读