[英]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.