将列值重塑为列名
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
我有一个具有以下结构的数据集:
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