Для циклов для создания наборов данных в R - PullRequest
0 голосов
/ 04 ноября 2018

Я хотел бы создать несколько наборов данных с помощью цикла for. в основном я хочу создать 29 наборов данных, в которых я могу найти в 1-ом 44-м и 45-м столбце DF, во 2-м - 46-й и 47-й столбец DF и так далее. Я пытался так безрезультатно.

data. <- data.frame(matrix( nrow=1442, ncol=2))

for (i in 1:29){
  assign(paste("data",i, sep="_"), data.)
  data_[i][,1] <- DF[,c(43+i)]
  data_[i][,2] <- DF[,c(44+i)]
}

Можете ли вы помочь мне, пожалуйста?

Ответы [ 3 ]

0 голосов
/ 04 ноября 2018

Попробуйте.

n = 1000
k = 120 
DF = matrix(runif(n*k), n, k)

for (i in 1:29){
    tmp = DF[,c(43, 43) + c(2*i-1, 2*i)]
    assign(paste0("data_", i), tmp)
    }   

ls()
all(data_1 == DF[,c(44, 45)])
all(data_2 == DF[,c(46, 47)])

Выполнение data_[i] заставит R искать объект с именем data_, так что вы не можете просто вставить имя объекта таким образом.

0 голосов
/ 05 ноября 2018

Одно решение с использованием purrr

DF <- data.frame(matrix(runif(10000),ncol=100))

library(purrr)

res <- 0:28 %>% 
  # create the indices to subset
  map( ~ c(44, 45) + .x) %>%
  # subset the df for each indice group
  map( ~ DF[, .x])

length(res)
#> [1] 29
str(head(res))
#> List of 6
#>  $ :'data.frame':    100 obs. of  2 variables:
#>   ..$ X44: num [1:100] 0.477 0.0593 0.2616 0.7349 0.1202 ...
#>   ..$ X45: num [1:100] 0.43 0.105 0.557 0.341 0.111 ...
#>  $ :'data.frame':    100 obs. of  2 variables:
#>   ..$ X45: num [1:100] 0.43 0.105 0.557 0.341 0.111 ...
#>   ..$ X46: num [1:100] 0.78 0.877 0.518 0.162 0.565 ...
#>  $ :'data.frame':    100 obs. of  2 variables:
#>   ..$ X46: num [1:100] 0.78 0.877 0.518 0.162 0.565 ...
#>   ..$ X47: num [1:100] 0.931 0.985 0.59 0.656 0.713 ...
#>  $ :'data.frame':    100 obs. of  2 variables:
#>   ..$ X47: num [1:100] 0.931 0.985 0.59 0.656 0.713 ...
#>   ..$ X48: num [1:100] 0.82 0.899 0.359 0.809 0.329 ...
#>  $ :'data.frame':    100 obs. of  2 variables:
#>   ..$ X48: num [1:100] 0.82 0.899 0.359 0.809 0.329 ...
#>   ..$ X49: num [1:100] 0.7982 0.0966 0.2716 0.3364 0.7295 ...
#>  $ :'data.frame':    100 obs. of  2 variables:
#>   ..$ X49: num [1:100] 0.7982 0.0966 0.2716 0.3364 0.7295 ...
#>   ..$ X50: num [1:100] 0.83057 0.64207 0.94392 0.00904 0.26966 ...

Создано в 2018-11-04 пакетом Представления (v0.2.1)

0 голосов
/ 04 ноября 2018

Как это?

data <- list()

DF <- data.frame(matrix(runif(10000),ncol=100))

for (i in 1:29){
  data[[i]] <- data.frame(DF[,c(43:44+i)])
}

str(data, list.len = 3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...