read.table из write.table в R

Я пытаюсь сделать qdap::multigsub для того, чтобы исправить некоторые опечатки, неправильно написанные имена, варианты выражений и некоторые другие "аберрации" в списке типов климатических событий (да, это набор данных NOAA о штормах, который принадлежит заданию в классе Coursera по воспроизводимым исследованиям; хотя это Исправление не требуется и не ожидается в назначении: это я стараюсь изо всех сил!).

Итак, у меня есть события с именами "внезапное наводнение", "внезапное наводнение", "внезапное наводнение" и тому подобное, и я хотел бы сгруппировать их все на уровне, называемом "внезапное наводнение". Итак, что я сделал сначала:

expr <- c("^flash.*floo.*","thun.*")
repl <- c("flash flood","thunderstorm")

Длина каждого вектора равна 51, и это knitr назначение, поэтому для того, чтобы он был читабельным (столбец поля =80), мне нужно было сделать что-то вроде

expr <- c(expr,"new_expr_1","new_expr_2")
repl <- c(repl,"new_repl_1","new_repl_2") # repeated many, many times

Что делает код немного грязным. Конечно, у меня есть полный expr а также repl векторы, поэтому я хотел бы, чтобы каждая пара (expr и repl) соответствующих значений в строке, чтобы читателю кода было легко (поэтому dput здесь не сработает: они не выравнивают каждую пару значений).

Я попробовал это:

a <- data.frame(expr=expr,repl=repl)
print(a,rownames=FALSE)
  # copying the output, and then
b <- read.table(header=TRUE,text="paste_text_here")

но это не удалось (я думаю, потому что print генерирует выходные данные без кавычек, и есть несколько выражений expr или repl). Я тоже пробовал

write.table(a,rownames=FALSE)
  # copying the output, and then
b <- read.table(header=TRUE,text="paste_text_here")

но это тоже не работает (думаю, потому что write.table выводит каждый элемент между кавычками и read.table находит слишком много кавычек для обработки).

Я хотел бы иметь в моем файле Rmarkdown что-то вроде этого:

exprRepl <- read.table(header=TRUE,text="expr repl
                                         expr_1 repl_1
                                         expr_2 repl_2")

Как я могу добиться этого по данным, которые у меня есть сейчас?

dput из первых 5 строк фрейма данных следует:

> dput(a[1:5,])
structure(list(expr = structure(c(5L, 1L, 2L, 3L, 4L), .Label = c("^BLIZZARD.*", 
"^FLASH.*FLOOD.*", "^HAIL.*", "^HEAVY.*RAIN.*", "^HURRICANE.*"
), class = "factor"), repl = structure(c(5L, 1L, 2L, 3L, 4L), .Label = c("BLIZZARD", 
"FLASH FLOOD", "HAIL", "HEAVY RAIN", "HURRICANE"), class = "factor")), .Names = c("expr", 
"repl"), row.names = c(NA, 5L), class = "data.frame")

Если есть какой-либо другой подход для замены неправильных / альтернативных имен, я был бы очень рад услышать об этом и попробовать!

1 ответ

Решение

Одним из решений является использование одной цитаты ' вокруг вставленного текста (это работает, пока нет ' в ваших данных):

d <- structure(list(expr = structure(c(5L, 1L, 2L, 3L, 4L), .Label = c("^BLIZZARD.*", 
"^FLASH.*FLOOD.*", "^HAIL.*", "^HEAVY.*RAIN.*", "^HURRICANE.*"
), class = "factor"), repl = structure(c(5L, 1L, 2L, 3L, 4L), .Label = c("BLIZZARD", 
"FLASH FLOOD", "HAIL", "HEAVY RAIN", "HURRICANE"), class = "factor")), .Names = c("expr", 
"repl"), row.names = c(NA, 5L), class = "data.frame")

write.table(d, row.names=FALSE)

# copy paste output of write.table in text field below:
read.table(header = TRUE, text='"expr" "repl"
"^HURRICANE.*" "HURRICANE"
"^BLIZZARD.*" "BLIZZARD"
"^FLASH.*FLOOD.*" "FLASH FLOOD"
"^HAIL.*" "HAIL"
"^HEAVY.*RAIN.*" "HEAVY RAIN"')
Другие вопросы по тегам