2014-10-10 54 views
1

我在R中編寫了一個腳本,它合併並修改某些csv數據,然後使用write table()保存結果數據幀。當它保存文件時,它會將當前日期添加到文件的名稱中。結果數據框的第三列始終是國家特定的,所以我想知道是否有辦法在文件名中使用write.table取代國家代碼(第三列的名稱)的國家名稱。根據數據框中第三列的名稱使用write.table()時更改文件名

例如,如果第三列的名稱是「它」,我想使用write.table將「意大利」添加到csv文件的名稱。

+0

並提出以下地址的答案嗎? – shekeine 2014-10-13 14:52:58

回答

1

將國家名稱和代碼列表導入到R中:(在腳本的最頂端執行此操作是明智的:在處理循環外部,因此您不會反覆讀取正在寫入的每個數據集的數據。出到.csv代碼的其餘部分則只是你目前的write.table命令之前

library(RCurl) 
csv_src <- getURL("https://raw.githubusercontent.com/umpirsky/country-list/master/country/cldr/en/country.csv") 

world <- read.csv(text=csv_src, header=T)` 

獲取數據第三列的名稱與國家代碼:

countrycode <- colnames(yourdata)[3]

提取相應國家名稱:

country_idx <- grep(pattern=countrycode, x=world$iso, ignore.case = TRUE) 

country <- world$name[country_idx] 

連接國名到CSV文件名(替換「......」與任何其他標記你想附加到輸出文件名。否則,刪除 「......」

csv_name <- paste0("...",country, ".csv") 

寫下您的數據保存到文件:

你需要
write.table(x=yourdata, file=csv_name) 

好運:-)

+0

謝謝,這很有用。在我的具體情況下,我可以在國家代碼< - colnames(yourdata)[3]之後使用快捷方式,在paste函數中包含ifelse(因爲國家代碼包含在第三列的名稱中,它包括國家在文件中,如果它匹配的國家代碼) – Yiyo 2014-10-14 13:05:13

+0

超級,高興地幫助,需要讓我的方式'ifelse',似乎很方便。 – shekeine 2014-10-15 08:02:11