Цикл по нескольким переменным с тем же именем, но с другим суффиксом - PullRequest
0 голосов
/ 21 февраля 2019

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

В качестве примера, вот составленный набор данных только для иллюстративных целей:

n <- c(1:100) 
var1 <-NA
var1[n < 20] <- 1
var1[n >50] <- 0
var2 <-NA
var2[n < 30] <- 1
var2[n >50] <- 0
var3 <-NA
var3[n < 10] <- 1
var3[n >40] <- 0
var4 <-NA
var4[n < 20] <- 1
var4[n > 450] <- 0
df <- data.frame(var1, var2, var3, var4, n)

С точки зрения функций, которые мне нужно зациклить, это в основном три в отношении этих переменных.Мне нужно иметь возможность сначала установить подмножество данных, создать новую переменную для каждого из исходных и записать новые результаты в кадр данных.Пожалуйста, не спрашивайте меня, зачем мне это делать, они являются частью гораздо большего кода.

Это шаги, которые мне нужно выполнить, но на всех 4:

df_sub <- subset(df, !is.na(df$var1))

sample1 <- nrow(df_sub[df_sub$var1 == 1,])

if(sample1 < 35) {
a1 <- NA
} else {
a1 <- mean(df_sub$n[df_sub$var1==1])

new_df <- data.frame(a1,a2,a3,a4)

Я думал о зацикливании суффикса, но не могу понять, как R справляется с этим.Я нашел решение для создания переменной в цикле через assign() (https://stats.stackexchange.com/questions/10838/produce-a-list-of-variable-name-in-a-for-loop-then-assign-values-to-them) Но я все еще не могу понять, как поступить с подмножеством. И в целом, как бы я делал цикл по числу в переменнойимя, а не номер столбца, список и т. д.

В качестве альтернативы, если есть способ создать функцию, в которой я могу создать переменные для экспорта в среду вне этой функции, а затем применить эту функцию к var1 - var4в DF и по-прежнему получить 4 различных версий (a1 - a4) в new_df.

1 Ответ

0 голосов
/ 21 февраля 2019

Вы можете запустить цикл и обновить переменную, над которой вы работаете, с помощью get(), а затем использовать assign().Как пример:

for (i in 1:number_of_variables){
     variable=get(paste0("var",i))

     ... work on the variable ...
    # Returns
    assign(paste0("df_sub",i), ... your result ...)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...