Функция R с одним аргументом для переименования / объединения переменных с похожим основанием - PullRequest
0 голосов
/ 10 октября 2018

Как случайный программист на R, я плохо понимаю, как выполнять задачи в стиле программирования, когда я хочу использовать эквивалент оболочки $variables или SAS &macroparameters.(Что я не уверен, что существует в R?)

Я пытаюсь написать функцию для создания новой переменной в кадре данных из существующих переменных с общим основанием.Например, я хочу создать:

df1$stem_new<- df1$stem_old1 + df1$stem_old2

несколько раз, где часть имени переменной stem изменится.

Наивно я хочу функцию groupvars, например:

groupvars <- function(stem){
df1$'stem'_new <- df1$'stem'_old1 + df1$'stem'_old2
} 

но я не уверен, как лучше всего добиться этого в R. Любая помощь или указатели на полезные функции будут оценены.Я пытался возиться с paste0() и names(), но пока не повезло.

Бен

1 Ответ

0 голосов
/ 10 октября 2018

Вот небольшой пример:

# example of original data
df = data.frame(stem_old1 = 1:3,
                stem_old2 = 11:13,
                z = 1:3)

df

#   stem_old1 stem_old2 z
# 1         1        11 1
# 2         2        12 2
# 3         3        13 3

# function (input dataframe and the column name pattern)
# 1. get the columns that match the pattern, calculate the row sums and save them as column v in your dataset
# 2. update column name from v to your pattern plus "_new"
# 3. return updated dataframe
f = function(d, x) {
  d$v = rowSums(d[,grepl(x, names(d))])
  names(d)[names(d) == "v"] = paste0(x,"_new")
  d }

# apply function
f(df, "stem")

#   stem_old1 stem_old2 z stem_new
# 1         1        11 1       12
# 2         2        12 2       14
# 3         3        13 3       16

Обратите внимание , что функция изначально сохраняет вычисленные суммы в (новом) столбце с именем v.Таким образом, если в исходном наборе данных уже есть столбец с именем v, возникнет проблема.

...