Код для импорта данных из запроса в R
Когда я пытаюсь ответить на вопрос в Qaru about R, большая часть моего времени проводится, пытаясь перестроить данные, приведенные в качестве примера (если автор вопроса не был достаточно хорош, чтобы предоставить их как R-код).
Итак, мой вопрос в том, что если кто-то просто задает вопрос и дает свой примерный кадр данных следующим образом:
a b c
1 11 foo
2 12 bar
3 13 baz
4 14 bar
5 15 foo
У вас есть подсказка или функция, позволяющая легко импортировать ее в сеанс R без ввода всей команды data.frame()
?
Спасибо заранее за любой намек!
PS: извините, если термин "запрос" не очень хорош в моем заголовке вопроса, но, похоже, вы не можете использовать слово "вопрос" в заголовке вопроса в переполнении стека: -)
Ответы
Ответ 1
Возможно, textConnection()
- это то, что вы хотите здесь:
R> zz <- read.table(textConnection("a b c
1 11 foo
2 12 bar
3 13 baz
4 14 bar
5 15 foo"), header=TRUE)
R> zz
a b c
1 1 11 foo
2 2 12 bar
3 3 13 baz
4 4 14 bar
5 5 15 foo
R>
Он позволяет обрабатывать текст как "соединение", из которого следует читать. Вы также можете просто скопировать и вставить, но доступ из буфера обмена в большей степени зависит от операционной системы и, следовательно, от менее портативного.
Ответ 2
В последней версии R теперь предлагается еще более низкий вариант нажатия клавиши, чем маршрут textConnection
для ввода столбчатых данных в read.table и друзей. столкнулся с этим:
zz
a b c
1 1 11 foo
2 2 12 bar
3 3 13 baz
4 4 14 bar
5 5 15 foo
Можно просто вставить: <- read.table(text="
после zz
, удалить возврат каретки, а затем вставить ", header=TRUE)
после последнего foo
и ввести [enter].
zz<- read.table(text=" a b c
1 1 11 foo
2 2 12 bar
3 3 13 baz
4 4 14 bar
5 5 15 foo", header=TRUE)
Можно также использовать scan
для эффективного ввода длинных последовательностей чистых чисел или записей с символьным вектором. Столкнувшись с: 67 75 44 25 99 37 6 96 77 21 31 41 5 52 13 46 14 70 100 18, можно просто ввести: zz <- scan()
и нажать [enter]. Затем вставьте выбранные номера и снова нажмите [enter] и, возможно, второй раз, чтобы вызвать двойной возврат каретки, и консоль должна ответить "читать 20 элементов".
> zz <- scan()
1: 67 75 44 25 99 37 6 96 77 21 31 41 5 52 13 46 14 70 100 18
21:
Read 20 items
Задача "символ". после вставки в консоль и редактирования посторонних строк и добавления кавычек, затем нажмите [enter]:
> countries <- scan(what="character")
1: 'republic of congo'
2: 'republic of the congo'
3: 'congo, republic of the'
4: 'congo, republic'
5: 'democratic republic of the congo'
6: 'congo, democratic republic of the'
7: 'dem rep of the congo'
8:
Read 7 items
Ответ 3
Вы также можете попросить собеседника использовать функцию dput
, которая сбрасывает любую структуру данных таким образом, вставлен в R. eg
> zz
a b c
1 1 11 foo
2 2 12 bar
3 3 13 baz
4 4 14 bar
5 5 15 foo
> dput(zz)
structure(list(a = 1:5, b = 11:15, c = structure(c(3L, 1L, 2L,
1L, 3L), .Label = c("bar", "baz", "foo"), class = "factor")), .Names = c("a",
"b", "c"), class = "data.frame", row.names = c(NA, -5L))
> xx <- structure(list(a = 1:5, b = 11:15, c = structure(c(3L, 1L, 2L,
+ 1L, 3L), .Label = c("bar", "baz", "foo"), class = "factor")), .Names = c("a",
+ "b", "c"), class = "data.frame", row.names = c(NA, -5L))
> xx
a b c
1 1 11 foo
2 2 12 bar
3 3 13 baz
4 4 14 bar
5 5 15 foo
Ответ 4
Просто хочу добавить это, потому что теперь я использую его регулярно, и я считаю его весьма полезным. Существует переполнение пакета (инструкции по установке ниже), в котором есть функция для чтения скопированных кадров данных. Скажем, я начинаю с сообщения SO, которое содержит данные, показанные ниже, но без вывода dput
.
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
Теперь, если я скопирую эти данные напрямую, а затем запустите следующие
library(overflow)
soread()
# data.frame "mydf" created in your workspace
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1 5.1 3.5 1.4 0.2 setosa
# 2 4.9 3.0 1.4 0.2 setosa
# 3 4.7 3.2 1.3 0.2 setosa
# 4 4.6 3.1 1.5 0.2 setosa
# 5 5.0 3.6 1.4 0.2 setosa
# 6 5.4 3.9 1.7 0.4 setosa
Теперь у меня есть кадр данных с именем mydf
, идентичный тому, который я скопировал в моей глобальной среде, поэтому мне не нужно ждать, пока OP опубликует dput
своего фрейма данных. Я могу изменить имя фрейма данных с аргументом out
, который (очевидно) по умолчанию равен mydf
. Есть также несколько других полезных функций для работы с сообщениями SO в пакете (например, sopkgs()
, который временно устанавливает пакет, чтобы вы могли помочь с вопросом о пакете, который вы ранее не устанавливали).
Если вы оставите library(overflow)
в .Rprofile
, тогда soread()
выполняет довольно быструю работу по импорту данных из сообщений SO.
переполнение доступно из GitHub и может быть установлено с помощью
library(devtools)
install_github("overflow", "sebastian-c")