Преобразование длинной строки в данные.рамка
Это нубовский вопрос, но я схожу с ума от этого. У меня есть вектор символов с именем bars.список, который я скачиваю с FTP-сервера. Вектор выглядит следующим образом:
""","times","open","high","low","close","numEvents","volume"rn"1",2015-05-18 06:50:00,23.98,23.98,23.5,23.77,421,0rn"2",2015-05-18 07:50:00,23.77,23.9,23.34,23.6,720,0rn"3",2015-05-18 08:50:00,23.6,23.6,23.32,23.42,720,0rn"4",2015-05-18 09:50:00,23.44,23.91,23.43,23.66,720,0rn"5",2015-05-18 10:50:00,23.67,24.06,23.59,24.02,720,0rn"6",2015-05-18 11:50:00,24.02,24.04,23.32,23.33,720,0rn"7",2015-05-18 12:50:00,23.33,23.42,22.74,22.81,720,0rn"8",2015-05-18 13:50:00,22.79,22.92,22.49,22.69,720,0rn"9",2015-05-18 14:50:00,22.69,22.7,22.14,22.14,481,0rn"10",2015-05-19 06:50:00,21.09,21.49,20.82,21.47,421,0rn"11",2015-05-19 07:50:00,21.48,21.68,21.46,21.51,720,0rn"12",2015-05-19 08:50:00,21.51,21.93,21.45,21.92,720,0rn"13",2015-05-19 09:50:00,21.92,21.92,21.55,21.55,720,0rn"
Мне нужно, чтобы этот вектор был преобразован в удобный формат, но
> read.table(bars.list, header = TRUE, sep = ",", quote = "", dec = ".")
Error in file(file, "rt") : cannot open the connection
In addition: Warning message:
In file(file, "rt") :
cannot open file '"","times","open","high","low","close","numEvents","volume"
"1",2015-05-18 06:50:00,23.98,23.98,23.5,23.77,421,0
"2",2015-05-18 07:50:00,23.77,23.9,23.34,23.6,720,0
"3",2015-05-18 08:50:00,23.6,23.6,23.32,23.42,720,0
"4",2015-05-18 09:50:00,23.44,23.91,23.43,23.66,720,0
Мне непонятно, почему R говорит мне, что некоторое соединение не может быть открыто, поскольку объект уже вставлен в качестве аргумента в функцию. Вывод R показывает мне с предупреждающим знаком уже довольно близко к тому, что мне нужно...
1 ответ:
Вот два варианта. Первый предлагает исправление текущего кода, а второй - более простую и эффективную альтернативу.
Вариант 1: первый аргумент в
read.table()
- этоfile
. Вы читаете из вектора, а не из файла, поэтому вам нужно использовать аргументtext
сtext = bars.list
.Кроме того, мы можем сначала избавиться от всех кавычек с помощью
gsub()
, а затем использоватьread.csv()
вместоread.table()
, посколькуheader = TRUE
иsep = ","
являются там значениями по умолчанию.read.csv(text = gsub("\"", "", bars.list), row.names = 1) # times open high low close numEvents volume # 1 2015-05-18 06:50:00 23.98 23.98 23.50 23.77 421 0 # 2 2015-05-18 07:50:00 23.77 23.90 23.34 23.60 720 0 # 3 2015-05-18 08:50:00 23.60 23.60 23.32 23.42 720 0 # 4 2015-05-18 09:50:00 23.44 23.91 23.43 23.66 720 0 # 5 2015-05-18 10:50:00 23.67 24.06 23.59 24.02 720 0 # 6 2015-05-18 11:50:00 24.02 24.04 23.32 23.33 720 0 # 7 2015-05-18 12:50:00 23.33 23.42 22.74 22.81 720 0 # 8 2015-05-18 13:50:00 22.79 22.92 22.49 22.69 720 0 # 9 2015-05-18 14:50:00 22.69 22.70 22.14 22.14 481 0 # 10 2015-05-19 06:50:00 21.09 21.49 20.82 21.47 421 0 # 11 2015-05-19 07:50:00 21.48 21.68 21.46 21.51 720 0 # 12 2015-05-19 08:50:00 21.51 21.93 21.45 21.92 720 0 # 13 2015-05-19 09:50:00 21.92 21.92 21.55 21.55 720 0
Для меня это сработало лучше, чем использование аргумента
quote
вread.csv()
.Вариант 2:
fread()
из данных .пакет table тоже отлично работает. Это быстрее и код чище. Нет необходимости использоватьgsub()
с ним. Мы можем поместитьbars.list
непосредственно и отбросить первый столбец.data.table::fread(bars.list, drop = 1)
Теперь вы получите предупреждение с помощью этого метода из-за заключительной цитаты
\"
. Вы можете либо жить с этим, либо получить результат без предупреждения, удалив эту последнюю цитату отметка.data.table::fread(sub("\"$", "", bars.list), drop = 1)
Данные:
bars.list <- "\"\",\"times\",\"open\",\"high\",\"low\",\"close\",\"numEvents\",\"volume\"\r\n\"1\",2015-05-18 06:50:00,23.98,23.98,23.5,23.77,421,0\r\n\"2\",2015-05-18 07:50:00,23.77,23.9,23.34,23.6,720,0\r\n\"3\",2015-05-18 08:50:00,23.6,23.6,23.32,23.42,720,0\r\n\"4\",2015-05-18 09:50:00,23.44,23.91,23.43,23.66,720,0\r\n\"5\",2015-05-18 10:50:00,23.67,24.06,23.59,24.02,720,0\r\n\"6\",2015-05-18 11:50:00,24.02,24.04,23.32,23.33,720,0\r\n\"7\",2015-05-18 12:50:00,23.33,23.42,22.74,22.81,720,0\r\n\"8\",2015-05-18 13:50:00,22.79,22.92,22.49,22.69,720,0\r\n\"9\",2015-05-18 14:50:00,22.69,22.7,22.14,22.14,481,0\r\n\"10\",2015-05-19 06:50:00,21.09,21.49,20.82,21.47,421,0\r\n\"11\",2015-05-19 07:50:00,21.48,21.68,21.46,21.51,720,0\r\n\"12\",2015-05-19 08:50:00,21.51,21.93,21.45,21.92,720,0\r\n\"13\",2015-05-19 09:50:00,21.92,21.92,21.55,21.55,720,0\r\n\""