在R中引用列以将TIBLE除以

在R中引用列以将TIBLE除以,r,dplyr,R,Dplyr,我试图将TIBLE中的所有数字列除以TIBLE中的一列。我可以通过显式地编写列的名称来实现这一点,但是我正在尝试将它构造为一个函数,这样我就可以将它应用到一个tibble列表中。我试图用下面的例子尽可能清楚地解释 如果这是我的藏书之一: > data <- tibble( ID = sample(letters, 3), x = 1:3, y = 9:11, z = y^2-x) > data #

我试图将TIBLE中的所有数字列除以TIBLE中的一列。我可以通过显式地编写列的名称来实现这一点,但是我正在尝试将它构造为一个函数,这样我就可以将它应用到一个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
但我得到了以下错误:

Error in ./last.col : non-numeric argument to binary operator
我理解这是因为“last.col”属于字符类,但我不确定如何修复它或继续前进

如果有任何建议,我将不胜感激


:)

您可以在此处使用非标准求值,方法是将列n转换为符号,然后求值

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

您可以在此处使用非标准求值,方法是将列n转换为符号,然后求值

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

我们可以使用
lappy
from
base R

i1 <- sapply(data, is.numeric)
data[i1] <- lapply(data[i1], function(x) x/data[[last.col]])

i1我们可以使用
lappy
from
base R

i1 <- sapply(data, is.numeric)
data[i1] <- lapply(data[i1], function(x) x/data[[last.col]])
i1
i1 <- sapply(data, is.numeric)
data[i1] <- lapply(data[i1], function(x) x/data[[last.col]])