簡體   English   中英

R:動態創建變量名

[英]R: Dynamically create a variable name

我正在尋找使用for循環創建多個數據幀,然后使用merge()它們縫合在一起。

我可以使用assign(paste(), blah)創建數據框。 但是,然后在同一for循環中,我需要刪除每個數據幀的第一列。

這是我的代碼的相關部分:

for (j in 1:3)
{
    #This is to create each data frame
    #This works
    assign(paste(platform, j, "df", sep = "_"), read.csv(file = paste(masterfilename,    extension, sep = "."), header = FALSE, skip = 1, nrows = 100))

    #This is to delete first column
    #This does not work
    assign(paste(platform, j, "df$V1", sep = "_"), NULL)
}

在第一種情況下,我將變量分配給數據框,因此它們會繼承該類型。 但是在第二種情況下,我將其分配給NULL

有人對我如何解決這個問題有任何建議嗎? 另外,是否有比assign()更優雅的解決方案,這似乎使我的代碼陷入困境? 謝謝,

assign可以用來構建變量名,但是“ name $ V1”不是變量名。 $是R中的運算符,因此您正在嘗試構建函數調用,而您不能使用assign做到這一點。 實際上,在這種情況下,最好避免完全assign 您無需創建一堆不同的變量。 如果data.frame是相關的,只需將它們放在列表中即可。

mydfs <- lapply(1:3, function(j) {
    df<- read.csv(file = paste(masterfilename, extension, sep = "."), 
        header = FALSE, skip = 1, nrows = 100))
    df$V1<-NULL
    df
})

現在,您可以使用mydfs[[1]]mydfs[[2]]等訪問它們。並且您可以使用*apply函數族中的任何一個運行函數總體data.sets。

正如@joran在他的評論中指出的那樣,執行此操作的正確方法是使用列表。 但是,如果您想堅持assign ,可以將第二條語句替換為

assign(paste(platform, j, "df", sep = "_"), 
    get(paste(platform, j, "df", sep = "_"))[
        2:length(get(paste(platform, j, "df", sep = "_")))]

如果您想使用列表,則讀取數據框的代碼將如下所示:

dfs <- replicate(3,
    read.csv(file = paste(masterfilename, extension, sep = "."),
        header = FALSE, skip = 1, nrows = 100), simplify = FALSE)

請注意,可以使用replicate因為對read.csv的調用不依賴於循環中的j 然后,您可以刪除每個廣告的第一列

dfs <- lapply(dfs, function(d) d[-1])

或者,將所有內容合並到一個命令中

dfs <- replicate(3,
    read.csv(file = paste(masterfilename, extension, sep = "."),
        header = FALSE, skip = 1, nrows = 100)[-1], simplify = FALSE)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM