2016-04-29 1 views
-1

*** Чтобы задать этот вопрос, я удалил столбец Time в моем примере ниже, который существует в моих фактических данных, которые показывают фактическое время (с разными секундами, несмотря на то же номинальное время), что привело к тому, что мои данные имели один балл за строку. Когда я округлил эти времена, я решил проблему с помощью dcast :)R data.table tidying - конденсировать строки на основе множественных критериев

В настоящее время я пытаюсь привести в порядок мои данные, и я сталкиваюсь с некоторыми препятствиями (я начинаю с R и делаю большую часть своего обучения из этого сайт). Я хочу преобразовать свои данные, чтобы симптомы отображались в столбцах, основанных как на совпадении человека, так и на номинальном времени симптома. Благодаря этим данным, я уменьшу свой набор данных из 64 000 наблюдений примерно до 8 000. Мои данные в настоящее время выглядит следующим образом:

Person Nominal.Time Name   Score 
1  +30   A    6 
1  +30   B    9 
1  +30   C    3 
2  +90   A    1 
2  +90   B    5 
2  +90   C    2 

Я был в состоянии превратить свои данные в следующем:

library(reshape2) 
WideSymptomData <- dcast(SymptomData,Person+Nominal.Time~Symptom.Name, value.var="Symptom.Score") 

Person Nominal.Time A B C 
1  +30   6     
1  +30    9   
1  +30     3  
2  +90   1    
2  +90    5   
2  +90     2  

Но, к сожалению, я озадачен в этой точке. Я исследовал и не могу показаться, чтобы выяснить, как сделать следующий шаг, чтобы в конечном итоге достичь этого:

Person Nominal.Time A B C 
1  +30   6 9 3     
2  +90   1 5 2   

Я думаю, что это question может быть похож на мой, хотя я не был в состоянии успешно применять отвечает за это. Любое руководство очень ценится, спасибо!

+0

'reshape (data, dir = 'wide', idvar = c ('Person', 'Nominal.Time'), timevar = 'Symptom.Name')' – rawr

ответ

2

Используя следующие данные

SymptomData <- data.table(read.table(text="Person Nominal.Time Symptom.Name Symptom.Score 
1  +30   A    6 
1  +30   B    9 
1  +30   C    3 
2  +90   A    1 
2  +90   B    5 
2  +90   C    2", header=T, colClasses=c("numeric","character","character","numeric"))) 

Это прекрасно работает

dcast(SymptomData, Person+Nominal.Time~Symptom.Name, value.var="Symptom.Score") 
# Person Nominal.Time A B C 
# 1  1   +30 6 9 3 
# 2  2   +90 1 5 2 

Испытано с reshape2_1.4.1 и data.table_1.9.6. Убедитесь, что ваш пример является репрезентативным для ваших реальных данных.

+0

Когда я использую этот код, я получаю это сообщение " Использование столбца Nominal.Time в качестве значения: используйте значение.var для переопределения. " и столбцы симптомов A, B, C заполняются значениями Nominal.Time, и я все еще сталкиваюсь со многими строками, содержащими пробелы (NA), как я изложил в своем первоначальном сообщении. – willz

+0

Возможно, вы захотите попробовать добавить параметр value.var: dcast (SymptomData, Person + Nominal.Time ~ Symptom.Name, value.var = "Symptom.Score") –

+0

@willz вы можете добавить номера версий пакетов, которые вы с помощью? И вы проверили данные выше? Или у вас больше столбцов или что-то еще? – MrFlick