将文本文件转换为数据帧R
我知道这里也有人问过类似的问题,但我仍然相信我的任务更复杂 我有一个文本文件,其中包含来自项目geonames.org名为MX.txt的信息,其中的数据排列如下:将文本文件转换为数据帧R,r,bigdata,data-manipulation,R,Bigdata,Data Manipulation,我知道这里也有人问过类似的问题,但我仍然相信我的任务更复杂 我有一个文本文件,其中包含来自项目geonames.org名为MX.txt的信息,其中的数据排列如下: MX 20158 Villas del Cobano Aguascalientes AGU Aguascalientes 001 Aguascalientes 01 21.8495 -102.3052 1 MX 20158 Hacienda el Cobano Aguascalientes A
MX 20158 Villas del Cobano Aguascalientes AGU Aguascalientes
001 Aguascalientes 01 21.8495 -102.3052 1
MX 20158 Hacienda el Cobano Aguascalientes AGU Aguascalientes
001 Aguascalientes 01 21.8495 -102.3052 1
MX 20159 Alianza Ferrocarrilera Aguascalientes AGU Aguascalientes
001 Aguascalientes 01 21.8495 -102.3052 1
MX 20159 Bosques del Prado Oriente Aguascalientes AGU Aguascalientes
001 Aguascalientes 01 21.8495 -102.3052 1
MX 20160 Francisco Guel Jimenez Aguascalientes AGU Aguascalientes
001 Aguascalientes 01 21.7561 -102.305 1
MX 20160 Las Viñas INFONAVIT Aguascalientes AGU Aguascalientes
001 Aguascalientes 01 21.7561 -102.305 1
MX 20164 Santa Anita 4a Sección Aguascalientes AGU Aguascalientes
001 Aguascalientes 01 21.7561 -102.305 1
V1 V2 V3 V4 V5 V6
MX 20158 Villas del Cobano Aguascalientes AGU Aguascalientes
V7 V8 V9 V10 V11 V12
001 Aguascalientes 01 21.8495 -102.3052 1
V1 V2 V3 V4 V5 V6
MX 20158 Hacienda el Cobano Aguascalientes AGU Aguascalientes
V7 V8 V9 V10 V11 V12
001 Aguascalientes 01 21.8495 -102.3052 1
这个文件有几千行
我想把它转换成一个包含12个变量的数据帧,其中字符串“Villas del Cobano”是这样的一个条目:
MX 20158 Villas del Cobano Aguascalientes AGU Aguascalientes
001 Aguascalientes 01 21.8495 -102.3052 1
MX 20158 Hacienda el Cobano Aguascalientes AGU Aguascalientes
001 Aguascalientes 01 21.8495 -102.3052 1
MX 20159 Alianza Ferrocarrilera Aguascalientes AGU Aguascalientes
001 Aguascalientes 01 21.8495 -102.3052 1
MX 20159 Bosques del Prado Oriente Aguascalientes AGU Aguascalientes
001 Aguascalientes 01 21.8495 -102.3052 1
MX 20160 Francisco Guel Jimenez Aguascalientes AGU Aguascalientes
001 Aguascalientes 01 21.7561 -102.305 1
MX 20160 Las Viñas INFONAVIT Aguascalientes AGU Aguascalientes
001 Aguascalientes 01 21.7561 -102.305 1
MX 20164 Santa Anita 4a Sección Aguascalientes AGU Aguascalientes
001 Aguascalientes 01 21.7561 -102.305 1
V1 V2 V3 V4 V5 V6
MX 20158 Villas del Cobano Aguascalientes AGU Aguascalientes
V7 V8 V9 V10 V11 V12
001 Aguascalientes 01 21.8495 -102.3052 1
V1 V2 V3 V4 V5 V6
MX 20158 Hacienda el Cobano Aguascalientes AGU Aguascalientes
V7 V8 V9 V10 V11 V12
001 Aguascalientes 01 21.8495 -102.3052 1
我已经尝试过以前在这里发布的答案,如:
,
因为英语不是我的第一语言,如果我的问题不清楚,我想通过评论部分回答问题,而不是得到否定的标志
提前谢谢 列之间的分隔符是选项卡,然后使用
data <- read.table(file="MX.txt", sep="\t", quote="", comment.char="")
data我提出了一个冗长的解决方案,可能会得到你想要的。简而言之,我使用每个嵌套列表的起点和终点之间的已知距离来隔离“多部分名称”,将其连接起来,并将其作为列输入到其他数据中
函数splitAt来自
#支持功能
splitAt假设其余数据与此数据类似。我必须做很多清洁工作(例如,gsub
ing):
守则:
vect <- unlist(Map(function(x, y) paste(x, y), dat[c(T, F)], dat[c(F, T)]),
use.names = FALSE)
read.table(text=gsub("\\s{2,}", ", ", gsub("(\\s)(\\d{2,})", " \\2",
gsub("(\\d{2,}|[A-Z]+)\\s+", "\\1 ", vect))), sep=",")
vect这可能是个愚蠢的问题,但您是否尝试过使用sep=“\t”
读取.table()
?你能展示一下你尝试过的代码和最终得到的结果吗?谢谢你的快速回复!不,事实上我没有,当我不小心删除了所有文件时,它似乎像我想要的那样工作,但第一行现在显示:“扫描错误(文件、内容、nmax、sep、dec、quote、skip、nlines、na.strings,:第67894行没有12个元素”刚刚编辑了这样一行,效果很好。你想把它作为一个答案写下来,这样我就可以把它标记为回答了吗?@LJW现在刚回到这个问题上-看起来你下面有一些很好的答案,所以我不会重复了。很高兴你的答案起作用了!很抱歉反馈太晚,第一个答案实际上解决了我的问题,但你的答案非常有趣/合乎逻辑。Yh谢谢你!