R функция с возможностью ввода данных для выбранных столбцов

#r #data.table

#r #данные.таблица

Вопрос:

  set.seed(1)
   data=data.frame(
    student=1:5000,
    alfa =runif(5000), 
    bravo =runif(5000), 
    charlie =runif(5000), 
    delta =runif(5000), 
    echo =runif(5000))
setDT(data)
data[, colnames(data[1:3]) := fifelse(colname(data) < 2500, "a", "b")]
 

Так что в основном то, что я хочу сделать, это:
Для столбцов 1-3 (студент, альфа, браво) Я хочу заменить значения <2500 на «a» или, если оно равно 2500 и больше, заменить его на «b». Я хочу сделать это одновременно для трех столбцов. Я знаю, что могу писать отдельные команды с помощью := fifelse(), но дело в том, что у меня гораздо больше данных, и мне нужно будет сделать это примерно 100 раз!!

Ответ №1:

Мы можем указать столбцы в .SDcols , перебирать .SD с lapply помощью , применять fifelse , присваивать ( := ) вывод обратно столбцам

 library(data.table)
nm1 <- names(data)[1:3]
data[, (nm1) := lapply(.SD, function(x) fifelse(x < 2500, "a", "b")),
       .SDcols = nm1]
 

-вывод

 head(data)
#   student alfa bravo    charlie     delta      echo
#1:       a    a     a 0.06471249 0.2133639 0.2106027
#2:       a    a     a 0.67661240 0.9693570 0.1147864
#3:       a    a     a 0.73537169 0.7277707 0.1453641
#4:       a    a     a 0.11129967 0.3439635 0.3099322
#5:       a    a     a 0.04665462 0.1440118 0.1502421
#6:       a    a     a 0.13091031 0.1385575 0.5266817