0
這裏下面是代碼:如何將嵌入數據更改爲數據框中的「平坦」。
exam.d <- data.frame(seq.no=c(2,3,4,2,3,4,2,3,4,2,3,4),
pd.no=c(100,100,100,200,200,200,300,300,300,400,400,400),
value=100:111)
f <- function(a){
a/(a[1]+a[2])*2
}
d <- aggregate(value~pd.no,data=exam.d, f)
> d
pd.no value.1 value.2 value.3
1 100 0.9950249 1.0049751 1.0149254
2 200 0.9951691 1.0048309 1.0144928
3 300 0.9953052 1.0046948 1.0140845
4 400 0.9954338 1.0045662 1.0136986
所以,我要融化d,以使今後的工作,但我得到了一個錯誤信息:
> melt(d, id="pd.no")
Error in prettyNum(.Internal(format(x, trim, digits, nsmall, width, 3L, :
dims [product 12] do not match the length of object [4]
我查了D的信息,後來我才知道爲什麼。該值1,值2,值3是不是D的數據幀一個「真實」的元素,但所謂的「價值」是:
> str(d)
'data.frame': 4 obs. of 2 variables:
$ pd.no: num 100 200 300 400
$ value: num [1:4, 1:3] 0.995 0.995 0.995 0.995 1.005 ...
爲了解決我的問題,我可以繞過使用d $值的情況。但我想知道,如果我想獲得這樣的數據框而沒有「價值」,並且可以通過d $ value1,d $ value2 ...獲取數據,那該怎麼做?
> d
pd.no value.1 value.2 value.3
1 100 0.9950249 1.0049751 1.0149254
2 200 0.9951691 1.0048309 1.0144928
3 300 0.9953052 1.0046948 1.0140845
4 400 0.9954338 1.0045662 1.0136986
感謝ü。它運作良好。但是,你能告訴我「data.frame(d)」和「do.call(data.frame,d)」之間的區別是什麼,因爲第一個不能工作,但第二個可以? – kanpu
@kanpu,你真正想要做的是'data.frame(d $ value)'。 'do.call(data.frame,d)'方法是對所有值的泛化。如果您彙總了多個列,這可能很有用。 – A5C1D2H2I1M1N2O1R2T1
謝謝。這非常有幫助。 – kanpu