Проблема, с которой я столкнулся, связана с конкретной операцией для * apply (например, apply или lapply и т. Д., Я не уверен).

Фрейм данных: dlt:

        dlt.1    dlt.2    dlt.3    dlt.4    dlt.5  
  1  3.244198 6.482869 9.711874 12.92918 16.13489
  6  3.196401 6.391871 9.585553 12.77681 15.96547
 19  3.182911 6.365424 9.547196 12.72799 15.90795
 24  3.164079 6.328089 9.491971 12.65577 15.81984

А вектор равен freq:

 1 2 3 4 5

Теперь я собираюсь сопоставить dt и freqn с функцией foo:

foo <- function( dlti, freqi){ dlti * freqi }

Где я надеюсь, что i-й столбец dlt соответствует i-му элементу freq

Я пробовал apply и mapply, но оба потерпели неудачу. Кто-нибудь, пожалуйста, покажите мне, как правильно?

0
dawei 14 Мар 2018 в 05:41

2 ответа

Лучший ответ

Это не тот ответ, который вам нужен, но он показывает направление. Собственно, из вашего вопроса неясно, чего вы на самом деле хотите, потому что вы не показываете желаемый результат. Вы также должны включить код, который создает ваш data.frame. Без этого в вашем вопросе будет двусмысленность. Так что не голосуйте против моего ответа, потому что он не отвечает на ваш вопрос.

    dlt <- tribble(
       ~dlt_1,    ~dlt_2,   ~dlt_3,    ~dlt_4,    ~dlt_5  ,
    3.244198, 6.482869, 9.711874, 12.92918, 16.13489,
    3.196401, 6.391871, 9.585553, 12.77681, 15.96547,
   3.182911, 6.365424, 9.547196, 12.72799, 15.90795,
   3.164079, 6.328089, 9.491971, 12.65577, 15.81984 
)
freqi <- c(1,2,3,4,5)
foo <- function(dlti,freqi){dlti * freqi}
purrr::map2(dlt,freqi,foo)

$dlt_1
[1] 3.244198 3.196401 3.182911 3.164079

$dlt_2
[1] 12.96574 12.78374 12.73085 12.65618

$dlt_3
[1] 29.13562 28.75666 28.64159 28.47591

$dlt_4
[1] 51.71672 51.10724 50.91196 50.62308

$dlt_5
[1] 80.67445 79.82735 79.53975 79.09920
0
Harlan Nelson 14 Мар 2018 в 02:58

В base R мы можем сделать это, реплицируя 'freq', а затем выполнить *

dlt*freq[col(dlt)]
#     dlt.1    dlt.2    dlt.3    dlt.4    dlt.5
#1  3.244198 12.96574 29.13562 51.71672 80.67445
#6  3.196401 12.78374 28.75666 51.10724 79.82735
#19 3.182911 12.73085 28.64159 50.91196 79.53975
#24 3.164079 12.65618 28.47591 50.62308 79.09920

Или используя Map в base R

dlt[] <-  Map(`*`, dlt, freq)
0
akrun 14 Мар 2018 в 04:51