r - 将 R 循环的结果写入 csv
问题描述
这是一个 csv,包括许多论文的详细信息,例如论文的标题和论文的作者地址。我正在尝试从有关作者地址的字符串中提取名称。字符串之一如下。
Jacod, Jean@Univ Paris 06, Inst Math Jussieu, F-75005 Paris,
France::Reiss, Markus@Humboldt Univ, Inst Math, D-10099 Berlin,
Germany
我的目标是在新的 csv 中打印“Jacod,Jean”“Reiss,Markus”的 2 个单元格中的 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 个或更多警告(使用 warnings() 查看前 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.csv
附加时可能会有点奇怪,所以我不推荐它)做类似的事情,但是需要更多的参数才能使它正确:
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
简化了很多事情。
推荐阅读
- python - python: 无噪音的 3-D 旋转?
- windows - 在 Powershell 电子邮件中包含文本文件的最后一行
- azure - 在后端服务中发起的 Nginx Ingress 服务调用未重定向到 https
- nlp - SpaCy 的相似度函数是如何工作的?
- python - 从以字符串为元素的列表列表中查找交集
- c# - WCF 第一次尝试:如何使 BasicHttpBinding 工作(客户端和服务器在同一台机器上)
- javascript - npm 从 package-lock.json 文件中创建一个 package.json 文件?
- javascript - 如何在对象中迭代和格式化我的值,同时将其作为对象返回?
- bash - 从脚本中获取环境变量并传递给 Dockerfile
- postgresql - Sailsjs v1 PostgreSQL 多对多关联 addToCollection 由于模型验证而失败