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"')