我有一个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年,有更多的变量重复。我用Ananda Mahto建议的包splitstackshape
尝试了R R中的代码,但得到了一条错误消息。那么,我的错误是什么?你知道吗
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版:
我尝试了这个代码与重塑功能,但我收到消息“内存耗尽”。我不知道为什么,因为数据帧只是改变它的方向,它的大小小于15MB。为什么会这样?我该怎么处理?你知道吗
newmydf <- reshape(mydf, direction = "long", idvar = 1:3, varying = 4:ncol(mydf), sep = "_")
Error: memory exhausted (limit reached?)
在R中,一种方法可能是跳过第一行读取csv,将其作为变量名的一部分重新添加,然后使用
reshape
获得所需的输出。你知道吗尝试以下操作:
在重命名步骤之后,如果
reshape()
对您来说太慢,请从我的“splitstackshape”包中尝试merged.stack
:R
中的另一种方法是在使用@Ananda Mahto的帖子中提到的read.csv
读取数据集之后使用dplyr/tidyr
(对于大数据集来说这会更快)数据
相关问题 更多 >
编程相关推荐