r - 在R中引用一列以将小标题除以
问题描述
我试图将 tibble 中的所有数字列除以 tibble 中的列之一。我可以通过显式编写列的名称来做到这一点,但是我试图将它构造为一个函数,以便我可以将它应用于一个小标题列表。我试图用下面的例子尽可能清楚地解释。
如果这是我的小标题之一:
> data <- tibble(
ID = sample(letters, 3),
x = 1:3,
y = 9:11,
z = y^2-x)
> data
# A tibble: 3 x 4
ID x y z
<chr> <int> <int> <dbl>
1 r 1 9 80
2 k 2 10 98
3 f 3 11 118
我想将 x、y 和 z 列除以 z,并且可以通过以下方式执行此操作:
> data %>% mutate_if(is.numeric, ~ . / z) -> data.new
> data.new
# A tibble: 3 x 4
ID x y z
<chr> <dbl> <dbl> <dbl>
1 r 0.0125 0.112 1
2 k 0.0204 0.102 1
3 f 0.0254 0.0932 1
但我不想明确命名列'z'。我希望能够提取名称然后使用它。我试图这样做:
# retrieve name of last column
> colnames(data)[ncol(data)] -> last.col
# reference the above to perform the division
> data %>% mutate_if(is.numeric, ~ . / last.col) -> data.new2
但我收到以下错误:
Error in ./last.col : non-numeric argument to binary operator
我知道这是因为“last.col”属于字符类,但我不确定如何修复它或继续前进。
我将不胜感激任何建议!
:)
解决方案
您可以在此处通过将 columnn 转换为符号然后评估来使用非标准评估
library(dplyr)
library(rlang)
data %>% mutate(across(where(is.numeric), ~ . /!!sym(last.col)))
# A tibble: 3 x 4
# ID x y z
# <chr> <dbl> <dbl> <dbl>
#1 c 0.0125 0.112 1
#2 l 0.0204 0.102 1
#3 s 0.0254 0.0932 1
使用mutate_if
:
data %>% mutate_if(is.numeric, ~ . /!!sym(last.col))
推荐阅读
- c# - Asp.net C# MVC 需要一个模型/视图模型,它可以提供相同的视图(相同的表)并链接到两个不同的字段
- laravel - 如何使用自定义文件编写 Laravel Excel 导入测试?
- swift - 如何获取 NSSingleObjectArrayI 的值
- python - 有人可以解释我的 Python 数组发生了什么吗?
- rust - wbkgd 不设置背景颜色
- javascript - 在 PHP Mysqli 中插入数据后在正文中显示成功消息
- uwp - 我们是否可以在 UWP DataGrid 中合并单元格
- python - python中的任何代码用某个单词替换一行中的字符串并保留字符?
- php - PHP 使用 For Each 循环在数组中追加数组
- google-apps-script - 如何根据当前表单响应显示自定义确认消息