Как мне запрограммировать цикл в R? - PullRequest
0 голосов
/ 13 октября 2019

Я хотел бы запрограммировать цикл в R для записи фреймов данных.

Я пробовал это:

dts <- c('r1', 'r2', 'r3', 'r4', 'r5')
for (dt in dts){
  temp <- data.frame(S=paste0(dt,"_RAW$Zeit"), A=paste0(dt,"_RAW$Wert"))
  assign(dt, temp)
}

Но это не сработало. Неверный фрейм данных (нет значений, только эти две строки):

  | S           | A
-----------------------------
1 | r1_RAW$Zeit | r1_RAW$Wert

Я ожидаю этого:

r1 <- data.frame(S=r1_RAW$Zeit, A=r1_RAW$Wert)
r2 <- data.frame(S=r2_RAW$Zeit, A=r2_RAW$Wert)
...

1 Ответ

0 голосов
/ 13 октября 2019

Хитрость заключается в том, чтобы использовать mget, чтобы получить все входные кадры данных за пределами цикла for. Затем в цикле извлекаем интересующие столбцы и assign новые наборы данных.

dts <- c("r1", "r2", "r3")
r_RAW_list <- mget(paste0(dts, "_RAW"))

for(d in dts){
  i <- grep(d, names(r_RAW_list))
  temp_rRAW <- r_RAW_list[[i]]
  temp <- data.frame(S = temp_rRAW[["Zeit"]], A = temp_rRAW[["Wert"]])
  assign(d, temp)
}
rm(r_RAW_list, temp_rRAW, temp)

ls(pattern = "^r[[:digit:]]$")
#[1] "r1" "r2" "r3"

r1
#            S           A
#1  -1.2070657 -0.47719270
#2   0.2774292 -0.99838644
#3   1.0844412 -0.77625389
#4  -2.3456977  0.06445882
#5   0.4291247  0.95949406
#6   0.5060559 -0.11028549
#7  -0.5747400 -0.51100951
#8  -0.5466319 -0.91119542
#9  -0.5644520 -0.83717168
#10 -0.8900378  2.41583518

Проверка кода создания данных.

set.seed(1234)
n <- 10
r1_RAW <- data.frame(Zeit = rnorm(n), Wert = rnorm(n), Other = rnorm(n))
r2_RAW <- data.frame(Zeit = rnorm(n), Wert = rnorm(n), Other = rnorm(n))
r3_RAW <- data.frame(Zeit = rnorm(n), Wert = rnorm(n), Other = rnorm(n))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...