Как манипулировать или транспонировать набор данных для использования в R или SPSS - PullRequest
0 голосов
/ 19 декабря 2018

Мне нужно обработать необработанные данные (csv) в широком формате, чтобы я мог анализировать их в R или SPSS.

Это выглядит примерно так:

1,age,30 
1,race,black 
1,scale_total,35
2,age,20
2,race,white
2,scale_total,99

В идеале это будет выглядеть так:

ID,age,race,scale_total, etc
1, 30, black, 35 
2, 20, white, 99

Я добавил значения в верхнюю строку необработанных данных (ID, Вопрос, Ответ) и попробовал использовать функцию приведения, но я считаю, что эти агрегированные данные вместопросто преобразуя это:

data_mod <- cast(raw.data2, ID~Question, value="Response")
Aggregation requires fun.aggregate: length used as default

Ответы [ 3 ]

0 голосов
/ 19 декабря 2018

Вы можете использовать tidyr ...

library(tidyr)
df<-read.csv(text="1,age,30 
    1,race,black 
    1,scale_total,35
    2,age,20
    2,race,white
    2,scale_total,99", header=FALSE, stringsAsFactors=FALSE)

df %>% spread(key=V2,value=V3)

  V1 age   race scale_total
1  1 30  black           35
2  2  20  white          99
0 голосов
/ 20 декабря 2018

Для SPSS:

data list list/ID (f5) Question Response (2a20).
begin data
1 "age" "30" 
1 "race" "black" 
1 "scale_total" "35"
2 "age" "20"
2 "race" "white"
2 "scale_total" "99"
end data.

casestovars /id=id /index=question.

Обратите внимание, что результирующие переменные age и scale_total будут строковыми переменными - вам придется преобразовать их в числа перед дальнейшими преобразованиями:

alter type age scale_total (f8).
0 голосов
/ 19 декабря 2018

Нам нужно создать столбец последовательности, чтобы позаботиться о дублирующих строках, которые по умолчанию приводят к агрегации до length

library(data.table)
dcast(setDT(df1), ID + rowid(Question) ~ Question, value.var = 'Response')

ПРИМЕЧАНИЕ. Пример данных четко работает (дает ожидаемый результат) безиспользуя столбец последовательности.

dcast(setDT(df1), ID ~ Question)
#   ID age   race scale_total
#1:  1 30  black           35
#2:  2  20  white          99

Таким образом, это случай, когда применяется к полному набору данных с повторяющимися строками

data

df1 <- structure(list(ID = c(1L, 1L, 1L, 2L, 2L, 2L), Question = c("age", 
"race", "scale_total", "age", "race", "scale_total"), Response = c("30", 
 "black ", "35", "20", "white", "99")), class = "data.frame", 
 row.names = c(NA, -6L))
...