r - 按名称划分列
问题描述
我有一个带有 id 号(“tranche”)的节点名列表。我正在尝试由列名中的数字标识的 6 种不同策略。我想将“pl_sum”列除以它们相应的“clr”列。我希望将结果作为同一数据框中的附加列。
我认为它是某种应用函数,或者可能是 dplyr summarise_at 函数。但我无法让它工作。我会省去你完成任务的杂乱尝试。
nodename tranche pl1_sum pl2_sum pl3_sum pl4_sum pl5_sum pl6_sum clr1 clr2 clr3 clr4 clr5 clr6
<chr> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <int> <int> <int> <int> <int> <int>
1 AECC_CSWS 1 -255. -255. -255. 0 0 0 160 160 160 0 0 0
2 AECC_CSWS 2 -310. -310. -310. 0 0 0 161 161 161 0 0 0
3 AECC_CSWS 3 -218. -218. -218. 0 0 0 172 172 172 0 0 0
4 AECC_CSWS 4 -375. -375. -375. 81.7 0 0 227 227 227 18 0 0
5 AECC_ELKINS 1 -266. -266. -266. 0 0 0 160 160 160 0 0 0
6 AECC_ELKINS 2 -336. -336. -356. 0 0 0 161 161 157 0 0 0
解决方案
在base R
中,我们可以使用grep
找到 'pl' 列和对应的 'cl' (假设两组列在数据集中的顺序相同)
plcols <- grep("^pl\\d+_sum", names(df1), value = TRUE)
clcols <- grep("^clr\\d+$", names(df1), value = TRUE)
df1[paste0(plcols, "_by_", clcols)] <- df1[plcols]/df1[clcols]
,有tidyverse
多种选择,一种方法是map2
library(dplyr)
library(purrr)
library(stringr)
map2_dfc(df1[plcols], df1[clcols], `/`) %>%
rename_all(~ str_c(., 'new')) %>%
bind_cols(df1, .)
推荐阅读
- python - python类中的可选__ror__数据
- python-2.7 - AttributeError:“检查模块”对象没有 python 2.7 的属性“签名”
- r - 回溯一棵树的两列数据的父/路径
- javascript - 将条件与从 HTML 和 JSON 中的标记值检索的数据进行比较时出错
- r - $ 运算符对于 R 中函数内的 data.table 中的原子向量无效
- php - 使用 Symfony 和学说执行 Oracle 存储过程
- java - 使用 Mockito 进行单元测试
- php - php 中动态创建的按钮的 disabled 属性不会在 jquery 中使用它的名称或 id 更改,但它的 css 属性正在更改
- docker - Kubernetes 服务帐户令牌与秘密卷和预计卷之间的区别
- javascript - 为什么我在 fabricjs 画布上绘制的数字没有正确放置?