строка означает без учета НП/пробелов

скажем, у меня есть фрейм данных

names <- c('joe','bob','john','carl')
col2 <- c(1,4,3,4)
col3 <- c(2,10,"",7)
col4 <- c(3,10,7,4)


df <- data.frame(names, col2, col3, col4)

как мне получить 5-й столбец для отображения точных средств?

df$mean <- 0

df$mean <- rowMeans(df[, c(2:4)])

... но поскольку str(df) col3 является фактором, он не вычисляется правильно, я хочу, чтобы столбец df$mean показывал c(2,8,5, 5), так как 3-я строка должна принимать только среднее значение 3 и 7 (что равно 5). Я не хочу устанавливать «» равным 0, потому что тогда среднее значение для 3-й строки будет 3,333, что неверно.


person user_1771    schedule 06.10.2014    source источник


Ответы (1)


Пытаться:

df$col3<-as.numeric(as.character(df$col3))
df$mean <- rowMeans(df[, c(2:4)],na.rm=TRUE)
person Ujjwal    schedule 07.10.2014
comment
Кроме того, как лучше всего применить это ко всем столбцам? то есть, скажем, у меня есть 100 столбцов, все из которых должны быть as.numeric(as.character(df$coli). Вы бы порекомендовали цикл for? - person user_1771; 08.10.2014
comment
нет, циклы в R, как правило, очень медленные. Вместо этого используйте sapply: df2 <- sapply(df[101:200], function(x) as.numeric(as.character(x))), где 101 и 200 — это индексы, с которых начинаются и заканчиваются ваши 100 столбцов. Если вы хотите применить его ко всему фрейму данных, используйте: df <- sapply(df, function(x) as.numeric(as.character(x))) - person Ujjwal; 08.10.2014