Преобразование короткого широкого фрейма данных в длинный текст с произвольным текстом - PullRequest
1 голос
/ 03 февраля 2011

Я импортировал данные, относящиеся примерно к 70 людям, из трех таблиц данных и объединил их в один фрейм данных в R. Некоторые из 100 полей являются прямыми, например date.birth, number.surgeries.lifetime и number.surgeries.12months.Другие поля, такие как «комментарии», могут не содержать значения или могут содержать одно предложение или даже несколько предложений.

У некоторых людей есть аномалия, означающая, что что-то отсутствует или не совсем правильно, и для этих людей я должен вручную исследовать, что происходит.Когда я открываю фрейм данных как фрейм данных или даже как таблицу в fix (), это трудно читать.Я должен прокрутить слева направо, а затем мне нужно смешать несколько столбцов, чтобы прочитать только один комментарий.

Было бы намного лучше, если бы я мог выделить 5 пациентов, которых мне нужно исследовать и сообщитьданные в виде свободного текста.Я думал, что смогу сделать это, экспортируя в CSV, но трудно понять, какие поля какие.Например, 2001-01-05, 12, 4, тестирование было сделано, пока он жил в Лос-Анджелесе.Это было легко, представьте, что произойдет, если есть 100 полей, многие из которых являются числами, многие являются датами, есть несколько различных полей для комментариев.

Лучшим способом было бы вывести такой отчет:
date.birth: 2001-01-05, number.surgeries.lifetime: 12, number.surgeries.12months: 4, комментарии: придет поговорить с нами в понедельник
Каждая из 5 записей будет следовать этому формату.
имя поля 1: запись значения поля 1 1, имя поля 2: запись значения поля 2 1 ...
пропуск строки (или что-то легко увидеть)
имя поля 1: запись значения поля 1 2,имя поля 2: запись значения поля 2 2

Как мне это сделать?

Ответы [ 3 ]

3 голосов
/ 03 февраля 2011

Как насчет этого?

set.seed(1)
age <- abs(rnorm(10, 40, 20)) 
patient.key <- 101:110
date.birth <- as.Date("2011-02-02") - age * 365
number.surgeries.12months <- rnbinom(10, 1, .5)
number.surgeries.lifetime <- trunc(number.surgeries.12months * (1 + age/10))
comments <- "comments text here"
data <- data.frame(patient.key, 
                   date.birth, 
                   number.surgeries.12months, 
                   number.surgeries.lifetime, 
                   comments)

Подмножество данных интересующими вас пациентами и полями:

selected.patients <- c(105, 109)
selected.fields <- c("patient.key", "number.surgeries.lifetime", "comments")
subdata <- subset(data[ , selected.fields], patient.key %in% selected.patients)

Форматирование результата для печати. ​​

# paste the column name next to each data field
taggeddata <- apply(subdata, 1, 
                    function(row) paste(colnames(data), row, sep = ":"))
# paste all the data fields into one line of text
textdata <- apply(taggeddata, 2, 
                  function(rec) do.call("paste", as.list(rec)))
# write to a file or to screen
writeLines(textdata)
0 голосов
/ 03 февраля 2011

Хотя я рискую повториться, я приведу еще один пример для пакета RMySQL.Вы сможете редактировать свою базу данных с вашим любимым клиентом SQL (я рекомендую SequelPro ).Используя операторы SELECT / Filtering, а затем отредактируйте его.Например,

SELECT patentid, patentname, inability FROM patients LIMIT 5 

может отображать только необходимые поля.С хорошим клиентом SQL вы можете редактировать результат напрямую и сохранять результат в базе данных.После этого вы можете просто перезагрузить базу данных в R. Я знаю, что многие утверждают, что ваш набор данных слишком мал для таких издержек, но все же я бы предпочел свойства редактирования большинства SQL-редакторов R. То же самое относится и кприсоединение к таблицам, если это становится сложнее.Кроме того, вам может быть интересно написать представления («таблицы», которые обновляются при доступе), которые будут обрабатываться как таблицы в R.

0 голосов
/ 03 февраля 2011

Проверить библиотеку (изменить форму).Я думаю, что если вы начнете с melt () - ваши данные окажутся на пути к желаемому результату.Дайте нам знать, если это будет похоже на то, как это поможет, и как это будет происходить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...