Мне нужна помощь с добавлением некоторых столбцов во фрейм данных, которые, похоже, не могут быть правильными. Моя df составляет около 40 000 строк x 30 столбцов и имеет такую структуру:
Key 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 NumNotNA
317862 2151 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 0
317881 1105 51 33 98 8 27 56 28 17 39 11 112 14 87 7 273 56 189 245 119 7 147 25 NA NA NA 22
290507 111 56 28 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 2
290509 196 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 0
290520 91 0 2 1 4 1 1 0 0 0 1 1 4 0 1 0 5 0 1 0 1 0 0 4 1 0 25
290521 92 2 5 22 3 4 1 19 0 5 0 1 13 0 0 0 1 0 0 1 1 0 46 15 0 1 25
Я ищу, чтобы добавить 11 новых столбцов во фрейм данных, по одному для каждого взвешенного квантиля в последовательности seq (0,1 , 0,1). Я использую следующие весы косинуса для взвешивания наблюдений из имен столбцов 1:25 в df выше.
cosine_weights <- 1 + cos(pi*seq(0,24)/24)
Я могу получить значения, которые ищу, используя wtd.quantile ( ) функции как пакетов Hmis c, так и пакетов reldist в одной строке, но я не могу понять, как правильно использовать функции apply, чтобы применить это ко всему фрейму данных. Обратите внимание, что одна из проблем заключается в том, что несколько строк (например, строки 1 и 4 выше) содержат все значения NA для имен столбцов 1:25. Для этих строк я бы хотел, чтобы мои квантили также давали значения NA, но чтобы приводить действительные квантили для других строк.
Вот пример вывода, который я ищу из каждой строки, хотя я хотел бы добавить это как новые столбцы в мой существующий фрейм данных. Я пытался использовать это с mapply, но продолжаю сталкиваться с проблемами. Я должен привести данные к числовому значению c, чтобы вычислить их, но когда я пытаюсь применить их к полной df, он говорит, что мой объект (список) не может быть приведен к типу double. Кажется, что каждое исправление, которое я пробую, терпит неудачу, и я не могу найти другие подобные примеры в своих поисках.
> Hmisc::wtd.quantile(as.numeric(dat[6, 3:27]), weights=cosine_weights, probs = seq(0,1,0.1))
0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
0.0 0.0 0.0 1.0 1.6 3.0 4.0 5.0 6.6 20.8 46.0
Спасибо за вашу помощь!