根据通用名称将行转换为一行

时间:2015-06-21 18:22:53

标签: r

我有很多股票数据,但是以一种奇怪的方式,我找不到一个例子如何将它们转换为可能有用的输出。这是一段数据

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

2 个答案:

答案 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