Есть тысячи ответов, описывающих, как переформатировать из широких и длинных и упорядочить по определенным переменным. Я не знаю, чем я не обволакиваю голову. Мне нужно организовать строки, которые первоначально начинаются как rater, obs, val1, val2 и т. Д. В столбцы под rater для IRR.Измените данные на длинные столбцы на основе переменной в R для IRR
Учитывая формат, похожий на мои данные, которые могут быть созданы с:
r1 <- c('bob', 'sally', "george", "bob", "sally", "george")
r2 <- c(1,1,1,2,2,2)
r3 <- c("bad", "good", "good", "good", "good", "bad")
r4 <- c("bad", "bad", "good", "good", "good", "bad")
df=data.frame(r1,r2,r3,r4)
df = setNames(df, c('rater','obs', 'val1', 'val2'))
Мне нужно организовать данные в столбцы, основанные на «рейтер». Все, что работает было бы здорово, особенно если «набл» (число наблюдений) может быть сохранена, например, obs1_val1, obs1_val2 и т.д.
За что-то вдоль линий:
dcast(df, obs ~ rater)
Который создает:
obs bob george sally
1 1 bad good bad
2 2 good bad good
Однако это агрегирует и удаляет значения для val2.
Скорее, мне нужно что-то вдоль линий:
bob sally george
obs1_val1 bad good good
obs1_val2 bad bad good
obs2_val1 good good bad
obs2_val2 good good bad
Глядя на аналогичной responses, я вижу рекомендацию melt
, а затем dcast
[Я на самом деле не хочу, чтобы агрегировать - а просто складывают в столбцы].
Как струны для знач1 и val2 следует учитывать факторы, я попытался:
df$"val1" <- factor(df$val1, levels=c("bad","good"))
df$"val2" <- factor(df$val2, levels=c("bad","good"))
без какого-либо эффекта. Получение:
Aggregation function missing: defaulting to length
obs bob george sally
1 1 2 2 2
2 2 2 2 2
который не помогает.
?
'dcast (расплав (df, 1) : 2), variable + obs ~ rater) 'или' dcast (melt (df, 1: 2), obs + variable ~ rater) ', если вы хотите, чтобы его сортировали по' obs' –
Глядя на результат, я не уверен, что выбирает 1: 2. ? – Donnied
Первые две колонки –