如何查找值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