Проблема, с которой я столкнулся, связана с конкретной операцией для * 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
, но оба потерпели неудачу. Кто-нибудь, пожалуйста, покажите мне, как правильно?
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
В 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)
Похожие вопросы
Новые вопросы
r
R - это бесплатный язык программирования с открытым исходным кодом и программная среда для статистических вычислений, биоинформатики, визуализации и общих вычислений. Пожалуйста, предоставьте минимальные и воспроизводимые примеры вместе с желаемым результатом. Используйте dput () для данных и укажите все небазовые пакеты с вызовами library (). Не вставляйте изображения для данных или кода, вместо этого используйте блоки кода с отступом. По вопросам, связанным со статистикой, используйте https://stats.stackexchange.com.