【问题标题】:R; How to use a variable/dataset which is concatenated with an i, in a loopR;如何在循环中使用与 i 连接的变量/数据集
【发布时间】:2021-07-23 06:11:34
【问题描述】:

我不太擅长 R,很抱歉这个笨拙的问题。

我有大量不同的数据集。我想使用一个循环来加载所有这些并进行一些清理。 我还需要稍后通过聚类分析来运行它们。

我想为 1 个文件做什么:

data1 <- read.table("Datasæt Pris 1.csv", 
                 header = TRUE,
                 sep = "|")
rownames(data1) = data1$LPERMNO
data1$LPERMNO = NULL
data1<-data1[, colSums(is.na(data1)) != nrow(data1)]
data1[is.na(data1)] <- 0

所以第一部分我找到了一个可行的方法!:

for (i in 42:44){
assign(paste0("Data", i), read.table(paste("Datasæt Pris ",i,".csv",sep = ""), 
                                       header = TRUE,
                                       sep = "|"))
}

但是当我介绍下一步时,它不起作用。 我已经尝试过一百万种不同的 get()、assign()、cat()、paste()、eval() 变体。 作为一个例子,我试过:

for (i in 42:44){
assign(paste0("Data", i), read.table(paste("Datasæt Pris ",i,".csv",sep = ""), 
                                       header = TRUE,
                                       sep = "|"))
  rownames(cat("Data", i, sep="")) = cat("Data", i, "$LPERMNO",sep="")
  cat("Data", i, "$LPERMNO",sep="") = NULL
}

我在这里遇到的错误是: Data42$LPERMNOFejl i rownames(cat("Data", i, sep = "")) = cat("Data", i, "$LPERMNO", : 赋值目标扩展为非语言对象

我已经阅读了我能找到的所有主题。不过我有点着急,5月17号就要交论文了,我已经快到了每一步都要手动完成的地步了。

但我认为我的最后一次尝试是在这里发布一个问题,希望我的问题可以理解!

最好的问候

艾米莉

【问题讨论】:

    标签: r loops for-loop variables naming


    【解决方案1】:

    这通常使用许多应用函数之一来完成。这些收集每次迭代的输出并将其返回给您以收集它们。 lapply 会很适合这个。它会创建一个列表,列出每次迭代产生的任何内容。

    
    list.with.data.sets <- lapply( 42:44, function(i) {
        data1 <- read.table(paste("Datasæt Pris ",i,".csv",sep = ""),
                            header = TRUE,
                            sep = "|")
        rownames(data1) = data1$LPERMNO
        data1$LPERMNO = NULL
        data1 <- data1[, colSums(is.na(data1)) != nrow(data1) ]
        data1[is.na(data1)] <- 0
        return( data1 )
    })
    
    combined.data <- do.call( rbind, list.of.data.sets )
    
    ## if you have dplyr:
    library(dplyr)
    combined.data <- bind_rows( list.of.data.sets )
    
    

    如果您需要单独对它们进行聚类分析,而不是一大堆,则使用 lapply 再次处理它们:

    
    your.clusters <- lapply( list.with.data.sets, function(d) {
        cluster <- cluster.analysis.one.way.or.another(d)
        return( cluster )
    })
    
    

    etc..etc...整个想法是使用数据集列表而不是动态生成的变量名称进行操作。

    【讨论】:

    • 非常感谢您!我阅读了这些列表,但不明白如何将它们用于我的目的。现在这很有意义!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 2012-10-01
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    相关资源
    最近更新 更多