Рассчитать среднее значение одного и того же столбца в зависимости от всех остальных столбцов - PullRequest
0 голосов
/ 24 мая 2018

Предположим, что у меня есть следующее df

df <- structure(list(var1 = c(1, 0, 1, 0, 0 , 1 ), var2 = c(0, 
0, 0, 1, 1, 0), var99 = c(0, 1, 1, 1, 1, 0), value = c(154, 
120, 100, 180, 200, 460)), .Names = c("var1", "var2", "var99", "value" ), row.names = c(NA, -6L), class = "data.frame")

И я хочу получить эти выходные данные:

structure(list(var = c("var1", "var2", "var99"), mean = c(238, 
190, 150)), .Names = c("var", "mean"), row.names = c(NA, -3L), class = 
"data.frame")

Это: получить среднее значение столбца 'value'для всех остальных столбцов: var1, var2, ..., var99.Для вычисления среднего значения будут приниматься во внимание только строки с 1.

Я сделал это с помощью цикла for:

l <- vector("list", 3)
for (i in 1:3)
l[[i]] <- mean(df$value[df[,i]==1], na.rm = T)
i <- i+1

Может кто-нибудь предложить мне другой подход, исключив цикл с помощью Base Rкогда это возможно?

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Или:

sapply(subset(df, select = -value), function(x) mean(df$value[x == 1]))
0 голосов
/ 24 мая 2018
sapply(df[, -4], weighted.mean, x=df[, 4])

Или

colSums(sweep(df[, -4], 1, df[, 4], `*`)) / colSums(df[, -4])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...