我有一个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)
任何想法......?
答案 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