我有很多股票数据,但是以一种奇怪的方式,我找不到一个例子如何将它们转换为可能有用的输出。这是一段数据
stockname,value,prediction
Yahoo,32,12
Yahoo,21,12
Yahoo,30,10
Yahoo,56,19
Google,32,10
Google,22,30
是否可以将此数据框转换为更简单的数据框
stockname value1 value2 value3 value4 prediction1 prediction2 prediction3 prediction4
Yahoo 32 21 30 56 12 12 10 19
Google 32 22 10 10
答案 0 :(得分:5)
这是一个简单的问题,即重塑" long"到"宽"。这是使用reshape
的基本R解决方案:
# load data
d <- read.csv(text="stockname,value,prediction
Yahoo,32,12
Yahoo,21,12
Yahoo,30,10
Yahoo,56,19
Google,32,10
Google,22,30", header = TRUE)
# create a time indicator variable
d$t <- c(1:4, 1:2)
# reshape
reshape(d, idvar="stockname", direction="wide", timevar = "t")
# stockname value.1 prediction.1 value.2 prediction.2 value.3 prediction.3 value.4 prediction.4
# 1 Yahoo 32 12 21 12 30 10 56 19
# 5 Google 32 10 22 30 NA NA NA NA
答案 1 :(得分:4)
您可以从dcast
的开发版试用data.table
,即。 v1.9.5+
,可以包含多个value.var
列。安装devel版本的说明是here
library(data.table)#v1.9.5+
setDT(df1)[, indx:=1:.N, stockname]#create a sequence index by stockname
dcast(df1, stockname~indx, value.var=c('value', 'prediction'))
# stockname value_1 value_2 value_3 value_4 prediction_1 prediction_2
#1: Google 32 22 NA NA 10 30
#2: Yahoo 32 21 30 56 12 12
# prediction_3 prediction_4
#1: NA NA
#2: 10 19