【问题标题】:a loop to create a list of matrices generated from two different data frames in R用于创建从 R 中的两个不同数据帧生成的矩阵列表的循环
【发布时间】:2021-08-30 15:07:46
【问题描述】:

我有两个数据框。 df1 和 df2。都带有 c 列
使用聚类方法,我最终得到了 10 个聚类。每个 df 的相同集群是正确的。这意味着例如,两个 df 的第 4 行进入同一个集群。
我在两个 dfs 中添加了一个簇列,显示了为每一行分配的簇。

我想创建一个列表。
此列表包含 10 个矩阵,例如。
矩阵 1,是一个 2*c 矩阵。它的第一行是通过对集群 1 中的 df1 的那些行进行 colmeans 获得的。它的第二行是通过对集群 1 中的 df2 的那些行进行 colmeans 获得的。
和矩阵 2 ,簇 2 的 colmeans 等等。
这就是我所做的。但我只得到第 10 个矩阵,而不是矩阵 1 到 10 的列表。
我将不胜感激。

k=10
for(i in 1:k){
df1.mean.vec <- colMeans(subset(df1, clster == i))
df2.mean.vec <- colMeans(subset(df2, clster == i))
Mean.mat <- as.matrix(rbind(df1.mean.vec, df2.mean.vec), row.names= FALSE) 
Mean.list <- list() 
Mean.list[[i]] <- Mean.mat
names(Mean.list)[i] <- i
}

【问题讨论】:

    标签: r list dataframe matrix cluster-analysis


    【解决方案1】:

    Mean.list 应该在循环外初始化,它可以是长度为 k 的 NULL list

    Mean.list <- vector('list', k)
    for(i in 1:k){
       df1.mean.vec <- colMeans(subset(df1, clster == i))
       df2.mean.vec <- colMeans(subset(df2, clster == i))
       Mean.mat <- as.matrix(rbind(df1.mean.vec, df2.mean.vec), row.names= FALSE) 
    
       Mean.list[[i]] <- Mean.mat
       rm(Mean.mat)
       gc()
       names(Mean.list)[i] <- i
    }
    

    【讨论】:

    • 非常感谢!这有很大帮助。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    • 2019-12-28
    • 1970-01-01
    相关资源
    最近更新 更多