簡體   English   中英

在數據框列表中動態創建新的數據框列

[英]Dynamically create a new dataframe column within a list of dataframes

我有一個數據集列表。 每個數據集包含一個月的一些數據。 數據跨度多年,因此,我每年有12個數據集。 該數據最初是一堆Excel文件。 我已按照以下建議導入了所有先前轉換為.csv的文件,即:

datalist <- list()
files <- list.files(pattern="\\.csv$")

for(file in files) {
    stem <- gsub("\\.csv$","",file)
    datalist[[stem]] <- read.csv(file)
}

因此,我最終得到了一個名為datalist的列表,其中包含我的所有數據集。

現在,我的問題是,僅文件名包含實際收集每個數據部分的月份和年份,因此我想從每個數據集名稱中獲取名稱和年份,並將其插補到該數據框的兩個新列中: ”和“月”。

我保留為數據框名稱的所有文件名都遵循以下結構:[ month ] _ [ year ] _ [ ...其他一些文本 ],例如“ August_2012_foo_bar”。 所以我想我會先使用正則表達式來獲取月份,然后再獲取年份。 我的代碼存根是:

for(dataset in names(datalists)) {
    name <- dataset
    month <- strapply(name,"^([^_]*).*$")
    ...?
}

正則表達式"^([^_]*).*$"抓住下划線之前的所有內容,即月份。 當我需要將獲取的月份分配給數據集的新列時,我陷入困境。 我已經嘗試了assigncbind ,沒有運氣。

最后,我想將所有這些數據集垂直合並為一個。

謝謝你的幫助!

您可以引用一個新列並進行分配。 R將為您創建列。

嘗試添加:

datalist[[stem]]$Month <- month
...

這將創建一個名為“ Month”的新列,並為其分配month變量。 注意,R將禮貌地重復您要分​​配的變量,以匹配data.frame的現有長度。

因此,整個循環如下所示:

for(file in files) {
    stem <- gsub("\\.csv$","",file)
    datalist[[stem]] <- read.csv(file)

    #parse out the month and year here
    ...

    #assign to new columns
    datalist[[stem]]$Month <- month
    datalist[[stem]]$Year <- year
}

暫無
暫無

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

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