我有一个单行数据框:
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
链中执行此操作管道函数。
答案 0 :(得分:3)
将数据通过管道传递到表达式块中,然后运行更多标准代码以有条件地选择所需列的一种方式。
df %>% {if (pull(., who )==pull(., who2 )) {
select(., who3)
} else {
select(., how_many, reserve)
}}