r - 如何根据单行数据框中的列中的值使用 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
管道函数中执行此操作。
解决方案
一种方法是将数据传输到表达式块中,然后运行更多标准代码以有条件地选择您想要的列。
df %>% {if (pull(., who )==pull(., who2 )) {
select(., who3)
} else {
select(., how_many, reserve)
}}
推荐阅读
- docker - 从主机访问在 docker 容器中运行的 Chrome devtools 端点
- mongodb - 变量查询的索引策略是什么?
- r - ESS(Emacs):R调试下不要更改窗口配置(tracebug)
- ios - 带有图像和文本的 SwiftUI 表单选择器
- automated-tests - 空手道 - 身份验证 - 无法在密码下访问 url 地址
- python - SGDRegressor() 不断提高验证性能
- python - 为什么将一大块音频信号(PCM 16 位短阵列)乘以常数会产生机器人输出?
- javascript - 获得 LC 没有在字面上定义
- javascript - 在 p5js 草图中创建对象时出现语法错误
- azure - 用于在一个脚本中删除所有容器中 30 天以上的 .bak 文件的 Powershell 脚本