Во-первых, позвольте мне убедиться, что я обернул голову вокруг того, что вы хотите сделать: у вас есть несколько столбцов - в вашем примере PaidLoss_1
, ..., PaidLoss_9
, в которых много записей. Некоторые из этих записей равны 0, и вы хотите взять среднее значение (в каждом столбце) записей, которые не ноль. Я правильно понял?
Если это так:
Комментарий 1 : В самом конце вашего кода вы можете не использовать sum
и делить на число, чтобы получить желаемое. Очевидно, что работает , но это открывает для вас риск: если вы когда-нибудь измените значение n
вверху, то в лучшем случае вам придется отредактировать несколько строк внизу, и в в худшем случае вы забудете это сделать. Итак, я бы предложил что-то более похожее на mean(PaidLoss_1)
, чтобы получить среднее значение.
Прямо сейчас у вас есть n
как 252500, а ваш знаменатель в конце равен 2525, что приводит к увеличению вашего в 100 раз. Может быть, это то, что вы хотели; если это так, я бы порекомендовал mean(PaidLoss_1) * 100
по тем же причинам, что и выше.
Комментарий 2 : Вы можете делать то, что хотите, с помощью поднабора. Возьмите меньший пример в качестве демонстрации:
test <- c(10, 0, 10, 0, 10, 0)
mean(test) # gives 5
test!=0 # a vector of TRUE/FALSE for which are nonzero
test[test!=0] # the subset of test which we found to be nonzero
mean(test[test!=0]) # gives 10, the average of the nonzero entries
Средние три строки только для демонстрации; единственные необходимые строки, чтобы сделать то, что вы хотите - это первая (для объявления вектора) и последняя (для получения среднего). Таким образом, ваш код должен выглядеть примерно так: PaidLoss1 <- mean(PaidLoss_1[PaidLoss_1 != 0])
, или, может быть, в 100 раз.
Комментарий 3 : Вы можете подумать о том, чтобы организовать свои вещи в информационный фрейм. Вместо ввода PaidLoss_1
, PaidLoss_2
и т. Д. 1042 *, возможно, имеет смысл организовать все эти PaidLoss
вещи в матрицу. Затем вы можете получить доступ к элементам матрицы с индексированием [ , ]
. Это было бы полезно, потому что это очистило бы часть кода и предотвратило бы необходимость печатать много вещей; затем вы также можете использовать такие вещи, как семейство функций apply()
, чтобы избавить вас от необходимости вводить одни и те же команды снова и снова для разных столбцов (например, среднего). Вы также можете использовать фрейм данных или что-то еще для его организации, но наличие некоторой структуры сделает вашу жизнь проще.
(И, чтобы быть супер ясным, ваш код - это именно то, что выглядел мой код например, когда я впервые начал писать в R. Вы можете решить, стоит ли заниматься какой-то из этих оптимизаций, возможно, это просто зависит от того, сколько времени вы планируете потратить в R.)