Я пытаюсь разработать функцию, которая создает список data frame
подмножеств из предоставленного пользователем вектора столбцов и списка значений в каждом столбце для подмножества.
Пример кадра данных:
df <- data.frame(var1 = rep(1:3, each = 5),
var2 = rep(4:6, each = 5),
var3 = rep(7:9, each = 5))
Вектор столбцов для подмножества: cols.df <- c(1,2,3)
Список значений в каждом столбце для поднабора по: rows.df <- list(c(1:3), c(4:6), c(7:9))
Функция для итеративного создания списка подмножеств:
subsetfcn <- function(data, cols, rowslist){
df <- data
listofdfs <- list() # create data.frame to contain subsets
for(a in cols){
for(rows in rowslist) {
for(row in rows) {
df <- df[df[ , a]==row, ]
listofdfs[[row]] <- df
}
}
}
return(listofdfs)
}
results <- subsetfcn(df, cols.df, rows.df)
Ожидаемый вывод - это список:
> df[df[ , 1]==1, ]
var1 var2 var3
1 1 4 7
2 1 4 7
3 1 4 7
4 1 4 7
5 1 4 7
> df[df[ , 1]==2, ]
var1 var2 var3
6 2 5 8
7 2 5 8
8 2 5 8
9 2 5 8
10 2 5 8
> df[df[ , 1]==3, ]
var1 var2 var3
11 3 6 9
12 3 6 9
13 3 6 9
14 3 6 9
15 3 6 9
>
> df[df[ , 2]==4, ]
var1 var2 var3
1 1 4 7
2 1 4 7
3 1 4 7
4 1 4 7
5 1 4 7
> df[df[ , 2]==5, ]
var1 var2 var3
6 2 5 8
7 2 5 8
8 2 5 8
9 2 5 8
10 2 5 8
> df[df[ , 2]==6, ]
var1 var2 var3
11 3 6 9
12 3 6 9
13 3 6 9
14 3 6 9
15 3 6 9
и т. Д.
AsНа данный момент функция возвращает список из 9 фреймов данных, но у каждого нет строк.Я не уверен, почему правильные значения не передаются a
и row
.