Поскольку вы не предоставили пример набора данных, мы притворимся, что он выглядит так:
> nontidal_water_level <- lapply(1:4, function(i) data.frame(matrix(1:12 * i, ncol = 3 + (i %% 2))))
> str(nontidal_water_level)
List of 4
$ :'data.frame': 3 obs. of 4 variables:
..$ X1: int [1:3] 1 2 3
..$ X2: int [1:3] 4 5 6
..$ X3: int [1:3] 7 8 9
..$ X4: int [1:3] 10 11 12
$ :'data.frame': 4 obs. of 3 variables:
..$ X1: int [1:4] 2 4 6 8
..$ X2: int [1:4] 10 12 14 16
..$ X3: int [1:4] 18 20 22 24
$ :'data.frame': 3 obs. of 4 variables:
..$ X1: int [1:3] 3 6 9
..$ X2: int [1:3] 12 15 18
..$ X3: int [1:3] 21 24 27
..$ X4: int [1:3] 30 33 36
$ :'data.frame': 4 obs. of 3 variables:
..$ X1: int [1:4] 4 8 12 16
..$ X2: int [1:4] 20 24 28 32
..$ X3: int [1:4] 36 40 44 48
Для вопроса № 1 вы можете узнать столбцы каждого из них, повторив цикл и используя ncol
, а затем поместив кадры данных с одинаковым количеством столбцов в отдельные списки:
> ncolumns <- lapply(nontidal_water_level, ncol)
> nontidal_3col <- nontidal_water_level[ncolumns == 3]
> nontidal_4col <- nontidal_water_level[ncolumns == 4]
По вопросу № 2 вы можете позвонить rbind
по всем элементам каждого списка:
> (nontidal_3col <- do.call(rbind, nontidal_3col))
X1 X2 X3
1 2 10 18
2 4 12 20
3 6 14 22
4 8 16 24
5 4 20 36
6 8 24 40
7 12 28 44
8 16 32 48
> (nontidal_4col <- do.call(rbind, nontidal_4col))
X1 X2 X3 X4
1 1 4 7 10
2 2 5 8 11
3 3 6 9 12
4 3 12 21 30
5 6 15 24 33
6 9 18 27 36
Наконец, для вопроса 3 вы можете использовать пакет типа writexl , но я бы порекомендовал просто записать его как .csv
:
write.csv(nontidal_3col, "my_3_column_file.csv")
write.csv(nontidal_4col, "my_4_column_file.csv")