Как сослаться на столбец tibble, используя имя переменной, в трубе (R)

Я довольно новичок в R, поэтому этот вопрос может быть немного наивным.

У меня есть тиббл с несколькими столбцами, и я хочу создать фактор (Bin), поместив значения в один из столбцов в N столбцов. Что сделано в трубе. Тем не менее, я хотел бы иметь возможность определить столбец, который будет связан в верхней части скрипта (например, bin2use = RT), потому что я хочу, чтобы это было гибким.

Я пробовал несколько способов обращения к имени столбца с помощью этой переменной, но я не могу заставить его работать. Среди других я пробовал get(), eval(), [[]]

упрощенный пример кода

Subject <- c(rep(1,100), rep(2,100))
RT <- runif(200, 300, 800 )
data_st <- tibble(Subject, RT)

bin2use = 'RT'
nbin = 5

binned_data <- data_st %>%
  group_by(Subject) %>%
  mutate(
    Bin = cut_number(get(bin2use), nbin, label = F)
  )

Error in mutate_impl(.data, dots) : 
  non-numeric argument to binary operator

1 ответ

Решение

Мы можем использовать нестандартную оценку с `lazyeval

library(dplyr)
library(ggplot2)
f1 <- function(colName, bin){
     call <- lazyeval::interp(~cut_number(a, b, label = FALSE),
                        a = as.name(colName), b = bin)
     data_st %>%
           group_by(Subject) %>% 
           mutate_(.dots = setNames(list(call), "Bin"))
} 

f1(bin2use, nbin)
#Source: local data frame [200 x 3]
#Groups: Subject [2]

#   Subject       RT   Bin
#     <dbl>    <dbl> <int>
#1        1 752.2066     5
#2        1 353.0410     1
#3        1 676.5617     4
#4        1 493.0052     2
#5        1 532.2157     3
#6        1 467.5940     2
#7        1 791.6643     5
#8        1 333.1583     1
#9        1 342.5786     1
#10       1 637.8601     4
# ... with 190 more rows
Другие вопросы по тегам