如何查找值R中,我有一个数据帧 这是基于行和列
name val1 val2
A 2 3
B 5 6
C 7 9
我希望有一个数据帧
name Grp value
A val1 2
B val1 5
C val1 7
A val2 3
B val2 6
C val2 9
什么是最佳的解决方案?
如何查找值R中,我有一个数据帧 这是基于行和列
name val1 val2
A 2 3
B 5 6
C 7 9
我希望有一个数据帧
name Grp value
A val1 2
B val1 5
C val1 7
A val2 3
B val2 6
C val2 9
什么是最佳的解决方案?
它被称为从宽到长的格式重塑一个data.frame。一个选择这样做会使用包tidyr
:
library(tidyr)
gather(df, Grp, Value, -name)
# name Grp Value
#1 A val1 2
#2 B val1 5
#3 C val1 7
#4 A val2 3
#5 B val2 6
#6 C val2 9
或者只是使用melt
从reshape2
包
library(reshape2)
melt(df)
# name variable value
# 1 A val1 2
# 2 B val1 5
# 3 C val1 7
# 4 A val2 3
# 5 B val2 6
# 6 C val2 9
编辑:每@AnandaMahtos评论,如果你坚持有你variable
名称Grp
,您可以选择:
melt(df, variable.name = "Grp")
@AnandaMahto,够公平的,我没有注意到他希望他的变量被称为'Grp' – 2014-11-25 14:54:45
一个base R
选项是使用stack
cbind(name=df$name, stack(df, select=-name))
# name values ind
#1 A 2 val1
#2 B 5 val1
#3 C 7 val1
#4 A 3 val2
#5 B 6 val2
#6 C 9 val2
或没有任何额外的包:
ddff<- data.frame(name=c("A","B","C"),val1=c(2,5,7),val2=c(3,6,9))
ddff2<- reshape(ddff,direction="long", varying = list(names(ddff)[2:3]),v.names=c("values"),times=c("val1","val2"))[,1:3]
ddff2
# name time values
#1.val1 A val1 2
#2.val1 B val1 5
#3.val1 C val1 7
#1.val2 A val2 3
#2.val2 B val2 6
#3.val2 C val2 9
你是如何定义 “最佳解决方案”? – A5C1D2H2I1M1N2O1R2T1 2014-11-25 14:47:59