簡體   English   中英

將R循環的結果寫入csv

[英]write the results of a R loop into a csv

這是一篇csv,其中包括許多論文的詳細信息,如論文題目和作者的論文地址。 我正在嘗試從字符串中提取有關作者地址的名稱。 其中一個字符串如下。

Jacod, Jean@Univ Paris 06, Inst Math Jussieu, F-75005 Paris, 
France::Reiss, Markus@Humboldt Univ, Inst Math, D-10099 Berlin, 
Germany

我的目標是打印“Jacod,Jean”,“Reiss,Markus”在新csv中連續2個單元格中的兩個名字。

Jacod, Jean   Reiss, Markus

我可以從長字符串中提取關鍵字。 但我不能只在一個csv中輸出R循環的所有結果。

我試圖在循環中使用“write.csv”,但失敗了。

data<-read.csv('E:\\data\\ANNALS.csv')
da<-data$authors_address
for (string in da){
    re<-sub('(^.+)@.*$', '\\1', unlist(strsplit(string, '::')))
    write.csv(re,file="E:\\output.csv",append=TRUE)
}

我希望輸出一個新的csv,其中每行包含2~3個作者的論文名稱。 上面代碼的結果是錯誤“有50個或更多警告(使用警告()查看前50個)”

基於您的代碼和您對數據的描述,我推斷data$authors_address中的每個字符串實際上看起來更像是這樣,作者信息由::分隔

Jacod, Jean@Univ Paris 06, Inst Math Jussieu, F-75005 Paris, France::Reiss, Markus@Humboldt Univ, Inst Math, D-10099 Berlin, Germany

一個建議:CSV只是一種類型的平面文件,如果作者數量不同,它可能不適合您的輸出。 它仍然可行,但它們是更好的選擇。 一個簡單的文本文件,其中每組作者被附加到一個新行,將很好地工作。 例如:

for (s in data$authors_address){
    re <- paste(sub("(.*)@.*", "\\1", strsplit(s, "::")[[1]]), collapse = " - ")
    write(re, "E:\\output.txt", append = T)
}

文件output.txt看起來像這樣:

Jacod, Jean - Reiss, Markus
Doe, John - Doe, Jane - Guy, Some
Butts, Seymour
...

請注意,我首先使用-作為分隔符折疊向量,否則每個向量元素將附加到其自己的行。 如果你使用其他一個write.*選項,你還需要這個。

你可以使用write.table做一些類似的write.table write.csv在追加時可能write.table ,所以我不推薦它) ,但需要更多的參數才能使它正確:

for (s in data$authors_address){
    re <- paste(sub("(.*)@.*", "\\1", strsplit(s, "::")[[1]]), collapse = " - ")
    write.table(re, file = "E:\\output.csv", append = T, sep = ",", col.names = F,
                row.names = F
                )
    }

正如您所看到的,使用write而不是write.table / write.csv簡化了一些事情。

暫無
暫無

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

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