Есть ли способ разбить данные в r по столбцам, а затем запустить один и тот же набор команд для каждого набора данных - PullRequest
0 голосов
/ 17 января 2020

У меня есть таблица данных, сделанная в Excel, которую я преобразовал в текстовый файл. Команда, которую я использую, позволит мне выполнить ее, только если у меня только два столбца. Я переместил свои данные в столбцы, но теперь мне нужно как-то разбить их все на части, чтобы каждый столбец 2 - столбец 189 представлял собой отдельную таблицу, в которой столбец 1 не изменился.

Можно ли тогда запустить точный один и тот же набор команд снова и снова для 188 созданных таблиц и сохранения полученных данных в отдельный файл (или, что еще лучше, подстановку некоторых полученных значений в уравнение).

Извините, если вопрос слишком длинный или смехотворно просто - я полный новичок ie во всем, кроме базового c анализа.

Рад попробовать и изучить другие программы, если это решит мою проблему.

Ответы [ 2 ]

1 голос
/ 17 января 2020

Чтобы сгенерировать базовые c комбинации, вы можете использовать Map:

Map(cbind, df[1], df[-1])

Чтобы применить функцию к каждой комбинации, вам нужно отредактировать функцию немного:

Map(function(a,b) fun(cbind(a,b)), df[1], df[-1])

Или добавьте еще один уровень зацикливания с помощью lapply, если хотите сохранить компактный код.

lapply(Map(cbind, df[1], df[-1]), fun)
1 голос
/ 17 января 2020

Вы можете сделать следующее в базе R (я использую встроенный mtcars data.frame в качестве примера)

df <- mtcars
lst <- apply(rbind(1, 2:ncol(df)), 2, function(idx) df[, idx])

Это возвращает list data.frame с столбцами (1,2), (1,3), (1,4) и т. Д. Оригинального data.frame.

str(lst)
#List of 10
# $ :'data.frame':  32 obs. of  2 variables:
#  ..$ mpg: num [1:32] 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
#  ..$ cyl: num [1:32] 6 6 4 6 8 6 8 4 4 6 ...
# $ :'data.frame':  32 obs. of  2 variables:
#  ..$ mpg : num [1:32] 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
#  ..$ disp: num [1:32] 160 160 108 258 360 ...
# $ :'data.frame':  32 obs. of  2 variables:
#  ..$ mpg: num [1:32] 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
#  ..$ hp : num [1:32] 110 110 93 110 175 105 245 62 95 123 ...
# $ :'data.frame':  32 obs. of  2 variables:
#  ..$ mpg : num [1:32] 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
#  ..$ drat: num [1:32] 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
# $ :'data.frame':  32 obs. of  2 variables:
#  ..$ mpg: num [1:32] 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
#  ..$ wt : num [1:32] 2.62 2.88 2.32 3.21 3.44 ...
# $ :'data.frame':  32 obs. of  2 variables:
#  ..$ mpg : num [1:32] 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
#  ..$ qsec: num [1:32] 16.5 17 18.6 19.4 17 ...
# $ :'data.frame':  32 obs. of  2 variables:
#  ..$ mpg: num [1:32] 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
#  ..$ vs : num [1:32] 0 0 1 1 0 1 0 1 1 1 ...
# $ :'data.frame':  32 obs. of  2 variables:
#  ..$ mpg: num [1:32] 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
#  ..$ am : num [1:32] 1 1 1 0 0 0 0 0 0 0 ...
# $ :'data.frame':  32 obs. of  2 variables:
#  ..$ mpg : num [1:32] 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
#  ..$ gear: num [1:32] 4 4 4 3 3 3 3 4 4 4 ...
# $ :'data.frame':  32 obs. of  2 variables:
#  ..$ mpg : num [1:32] 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
#  ..$ carb: num [1:32] 4 4 1 1 2 1 4 2 2 4 ...

Работать на list из * 1012 нелегко * с использованием функции из семейства *apply.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...