将列值重塑为列名

Reshape column values to column names

我有一个具有以下结构的数据集:

df <- data.frame(mult=c(1,2,3,4),red=c(1,0.9,0.8,0.7),
result=c('value1','value2','value3','value4'))

我想在 3-D 绘图(x 轴:mult,y 轴:红色,x-y 点为 'result')或多个 2-D 绘图中显示。显然真正的DF有更多的行数和mult&red的组合。

列 mult 和 red 没有重复的值。我想要的是将 DF 重塑为 DF1:

-   1      0.9      0.8     0.7
1   value1 
2          value2
3                  value3
4  .....

所以基本上:

1) [mult] 个值保持原样(第 1 列)
2) [red] 值成为列名。
3) 'mult' 和 'red' 之间的每个交叉是一个值 新东风

我更喜欢使用 reshape 函数来完成此操作,但其他软件包也可以。

提前致谢,p.

尝试

 library(reshape2)
 df1 <- transform(df, result=as.character(result), 
                  red= factor(red, levels= unique(red)))
 dcast(df1, mult~red, value.var='result', fill='')[-1]
 #        1    0.9    0.8    0.7
 #1 value1                     
 #2        value2              
 #3               value3       
 #4                      value4

这是使用tidyr

的方法
library(tidyr)
out = rev(spread(df[-1], red, result))
out[is.na(out)] = ''

#> out
#       1    0.9    0.8    0.7
#1 value1                     
#2        value2              
#3               value3       
#4                      value4

根据您的要求使用整形

df <- data.frame(mult=c(1,2,3,4),red=c(1,0.9,0.8,0.7),
                 result=c('value1','value2','value3','value4'))
df$result = as.character(df$result)
dfWide = reshape(data = df, idvar = "mult", timevar = "red", v.names = "result", direction = "wide")
rownames(dfWide) = dfWide$mult
dfWide$mult = NULL
colnames(dfWide) = gsub(pattern = "result.", replacement = "", colnames(dfWide) )
dfWide[is.na(dfWide)] = ''
dfWide

#        1    0.9    0.8    0.7
# 1 value1                     
# 2        value2              
# 3               value3       
# 4                      value4