将字符串向量转换为数字然后获取这些数字的sd()

时间:2016-09-21 14:46:41

标签: r

我有一个dataframe FINAL,其中一列名为 Cluster-sizes 的列包含一串这样的数字。

“2,3,4,5”

我想创建一个名为ClusterSigma的新列,它将这些列转换为数值,然后在dataframe中按行提供数字的标准偏差。

我正在使用此但收到错误..?

getnums <- function(x) {sd(as.integer(strsplit(x,",")[[1]]))}
FINAL$ClusterSigma <- apply(FINAL$ClusterSizes,1,getnums)

任何想法......?

2 个答案:

答案 0 :(得分:2)

我们可以在阅读rowSds列以创建matrixStats并将其转换为read.csv后,data.frame(来自matrix)执行此操作。 / p>

library(matrixStats)
rowSds(as.matrix(read.csv(text=as.character(df1$Clustersize), header=FALSE)))
#[1] 1.290994 1.290994

数据

df1 <- data.frame(Clustersize = c("2,3,4,5", "3,4,5,6"))

答案 1 :(得分:1)

由于strsplit将输出一个列表,您可以尝试unlist()

test1 <- data.frame(Clustersizes=c("2,3,4,5", "1,1,1,1", "1,5,2,6"))
test1$ClusterSigma <- unlist(
  lapply(
    lapply(strsplit(as.character(test1$Clustersizes), ','), as.numeric), 
    sd))
test1
>  Clustersizes ClusterSigma
>1      2,3,4,5     1.290994
>2      1,1,1,1     0.000000
>3      1,5,2,6     2.380476