计算以逗号分隔的数字字符串的平均值

Calculate Mean of Comma-Separated String of Numbers

我的数据框中有一列由数字字符串组成,用逗号分隔。我想将字符串转换为数字列表,然后求平均值。我的数据框,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

中每个单元格平均值的新列

可以用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 class。否则,换行 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))