Подтвердить что ты не робот

Код для импорта данных из запроса в 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: извините, если термин "запрос" не очень хорош в моем заголовке вопроса, но, похоже, вы не можете использовать слово "вопрос" в заголовке вопроса в переполнении стека: -)

4b9b3361

Ответ 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")