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