我有以下数据框:
long band d Ret
100 0 1 2.10
100 0 2 1.96
100 0 1 -1.10
100 0 2 0.96
100 0 1 0.54
100 0 2 -2.12
200 0 1 3.10
200 0 2 -1.96
200 0 1 5.66
200 0 2 2.22
200 0 1 -0.54
200 0 2 0.25
我想对其进行转换,以便对应于相同long / band / d列的Ret值在一行中,以便:
long band d Ret1 Ret2 Ret3
100 0 1 2.10 -1.10 0.54
100 0 2 1.96 0.9. -2.12
200 0 1 3.10 5.66 -0.54
200 0 2 -1.96 2.22 0.25
我已经尝试过'转换'并融化,但他们没有条件让Rets并排
答案 0 :(得分:1)
将df作为输入数据帧
library(tidyr)
df_mdfd <- as.data.frame(spread(df,Ret_Var,4))
for (k in (4:ncol(df_mdfd))){
for (i in (1:nrow(df_mdfd)))
{
for (j in (4:ncol(df_mdfd)-1))
{
if (is.na(df_mdfd[i,j])&!(is.na((df_mdfd[i,j+1])))){
df_mdfd[i,j] <- df_mdfd[i,j+1]
df_mdfd[i,j+1] <- NA
} }}}
df_output <- as.data.frame(t(na.omit(t(df_mdfd))))
colnames(df_output) <- c("long","band","d","Ret1","Ret2","Ret3")
df_output