Рассчитать среднее значение разделенной запятыми строки чисел

У меня есть столбец в моем dataframe, который состоит из строк чисел, разделенных запятыми. Я хотел бы преобразовать строку в список чисел, а затем получить среднее значение. Мой фрейм данных, df:

a3
1,5,2
103.1
34,6

Сначала я преобразовал строку в список:

> df$a3_list <- strsplit(as.character(df$a3), split = ',')

новый df:

a3    a3_list
1,5,2 c("1", "5", "2")
103.1 103.1
34,6  c("34", "6")

На данный момент, однако, я не уверен, как получить новый столбец, содержащий среднее значение каждой ячейки в df$a3_list

2 ответа

Решение

Ты можешь использовать stringi, это быстро

library(stringi)
mat <- stri_split_fixed(df$a3, ',', simplify=T)
mat <- `dim<-`(as.numeric(mat), dim(mat))  # convert to numeric and save dims
rowMeans(mat, na.rm=T)
# [1]   2.666667 103.100000  20.000000

или с Base R

sapply(strsplit(as.character(df$a3), ",", fixed=T), function(x) mean(as.numeric(x)))

Другая base R вариант

 rowMeans(read.table(text=df$a3, sep=",", fill=TRUE), na.rm=TRUE)
 #[1]   2.666667 103.100000  20.000000

ПРИМЕЧАНИЕ. Предполагая, что "a3" character учебный класс. В противном случае оберните as.character(df$a3)

данные

 df <- structure(list(a3 = c("1,5,2", "103.1", "34,6")), .Names = "a3", 
 class = "data.frame", row.names = c(NA, -3L))
Другие вопросы по тегам