У меня есть CSV, который выглядит так:
1991 1992 1993 1991 1992 1993
VariableA VariableB VariableC VariableC VariableC VariableD VariableD VariableD
lm mt 1 3 4 2 3 5
Итак, я хотел бы создать переменную с именем year и сделать следующее:
VariableA VariableB Year VariableC VariableD
lm mt 1991 1 2
lm mt 1992 3 3
lm mt 1993 4 5
В основном я работаю с пандами, которые я изучаю, но я не знаю, как правильно читать эти данные, а затем выполнять манипуляции. Если кто-то придумает решение на R, тоже было бы неплохо.
ИЗДАНИЕ:
Мой реальный фрейм данных относится к годам с 1991 по 2013 год, и есть больше переменных, которые имеют дубликаты. Я попробовал код inr R с пакетом splitstackshape
, предложенным Ananda Mahto, но получаю сообщение об ошибке. Итак, в чем моя ошибка?
mydf <- read.csv("DatosCOMPUSTATfinal.csv", skip = 3, check.names = FALSE)
nombres <- names(mydf)[-c(1,2,3)]
nombres <- unique(nombres)
> nombres
[1] "Employees" "Market Value-daily"
[3] "Market to book - daily" "Total return"
[5] "Total assets" "total stockholders' equity"
[7] "Sales" "EBITDA"
[9] "EBIT" "Pretax income"
[11] "Income (loss)"
> names(mydf[c(1,2,3)])
[1] "Company name" "employer identification"
[3] "CUSIP"
names(mydf)[-c(1,2,3)] <- paste(names(mydf)[-c(1,2,3)],
c(1991:2013), sep = "_")
nv <- merged.stack(mydf, id.vars = names(mydf[c(1,2,3)]) , var.stubs = nombres , sep = "_" )
Затем я получаю сообщение об ошибке:
Error in if (ncol(x) == 1L) { : argument is of length zero
ВЕРСИЯ 2:
Я пробовал этот код с функцией изменения формы, но получаю сообщение "память исчерпана". Я не знаю, почему, потому что фрейм данных просто меняет свое направление, а его размер меньше 15 МБ. Почему это происходит и как с этим бороться?
newmydf <- reshape(mydf, direction = "long", idvar = 1:3, varying = 4:ncol(mydf), sep = "_")
Error: memory exhausted (limit reached?)
csv
, разделенный запятыми, или данные точно такие, как вы разместили, просто разделенные пробелами? - person thelatemail   schedule 21.10.2014