Цикл по столбцу одного фрейма данных при сохранении другого фрейма данных при передаче в функцию с 2 аргументами - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть несколько больших фреймов данных с более чем 6 миллионами наблюдений и 10 переменных на данный момент, но для удобства давайте предположим, что у меня на данный момент есть два упрощенных фрейма данных:

df1:

    A     B     C
1   1     0     2
2   2     3     5

df2:

    D
1   6
2   10

И у меня есть функция с двумя аргументами:

example_fn <- function(x,y){
  return(x+y)
}

Что я хотел бы сделать, в частности, это цикл по столбцам df1 для передачи в example_fn, в то время как df2 сохраняется

P / S: я привык использовать lapply для цикла, когда функция содержит только один аргумент, но теперь, когда есть два I Я не уверен, что делать

Пожалуйста, сообщите и заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 01 апреля 2020

Если df2 сохраняется и нам нужно только перебирать столбцы df1, мы все равно можем использовать lapply.

lapply(df1, example_fn, df2$D)
#Or call it explicitly
#lapply(df1, function(x) example_fn(x, df2$D))
#$A
#[1]  7 12

#$B
#[1]  6 13

#$C
#[1]  8 15

, который можно вызвать аналогичным образом, используя purrr::map

purrr::map(df1, example_fn, df2$D)
0 голосов
/ 01 апреля 2020

Мы можем использовать Map от base или map2 от purrr:

Map(function(x,y) x+y, df1,df2)

С purrr:

purrr::map2_df(df1,df2,function(x,y) x+y)

Используя mapply и mtcars для воспроизводимости:

head(mapply(function(x,y) x + y, mtcars, mtcars))
      mpg cyl disp  hp drat   wt  qsec vs am gear carb
[1,] 42.0  12  320 220 7.80 5.24 32.92  0  2    8    8
[2,] 42.0  12  320 220 7.80 5.75 34.04  0  2    8    8
[3,] 45.6   8  216 186 7.70 4.64 37.22  2  2    8    2
[4,] 42.8  12  516 220 6.16 6.43 38.88  2  0    6    2
[5,] 37.4  16  720 350 6.30 6.88 34.04  0  0    6    4
[6,] 36.2  12  450 210 5.52 6.92 40.44  2  0    6    2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...