2
一個相當新的R程序員,我似乎已經運行到一個奇怪的問題 - 可能是我的經驗不足有R訂貨合併的數據幀
閱讀和合並連續的文件合併爲一個數據幀後,我發現,爲了不按預期對數據進行排序。
我在每個文件中有多個參考,但每個文件都是指在不同時間獲得的測量數據。
下面的代碼
library(reshape)
# Enter file name to Read & Save data
FileName=readline("Enter File name:\n")
# Find first occurance of file
for (round1 in 1 : 6) {
ReadFile=paste(round1,"C_",FileName,"_Stats.csv", sep="")
if (file.exists(ReadFile))
break
}
x = data.frame(read.csv(ReadFile, header=TRUE),rnd=round1)
for (round2 in (round1+1) : 6) {
#
ReadFile=paste(round2,"C_",FileName,"_Stats.csv", sep="")
if (file.exists(ReadFile)) {
y = data.frame(read.csv(ReadFile, header=TRUE),rnd = round2)
if (round2 == (round1 +1))
z=data.frame(merge(x,y,all=TRUE))
z=data.frame(merge(y,z,all=TRUE))
}
}
ordered = order(z$lab_id)
results = z[ordered,]
res = data.frame(lab=results[,"lab_id"],bw=results[,"ZBW"],wi=results[,"ZWI"],pf_zbw=0,pf_zwi=0,r = results[,"rnd"])
#
# Establish no of samples recorded
nsmpls = length(res[,c("lab")])
# Evaluate Z_scores for Between Lab Results
for (i in 1 : nsmpls) {
if (res[i,"bw"] > 3 | res[i,"bw"] < -3)
res[i,"pf_zbw"]=1
}
# Evaluate Z_scores for Within Lab Results
for (i in 1 : nsmpls) {
if (res[i,"wi"] > 3 | res[i,"wi"] < -3)
res[i,"pf_zwi"]=1
}
dd = melt(res, id=c("lab","r"), "pf_zbw")
b = cast(dd, lab ~ r)
如果任何人都可以明白爲什麼排序僅適用於大約55 70的記錄,並能引導我在正確的方向,我將不得不
非常感謝
檢查z $ lab_id是否是一個因子(使用is.factor(z $ lab_id))。如果是,請嘗試z $ lab_id < - as.character(z $ lab_id),如果它應該是一個字符向量; z $ lab_id < - as.numeric(as.character(z $ lab_id))如果它應該是一個數字向量。然後再次訂購。 – 2010-01-11 11:17:34
親愛的Eduardo 謝謝。發現得好!!!我知道這很簡單,只是無法弄清楚。 是的字段lab_id是一個字符矢量,但有數字。 喬納森,謝謝你的建議。 全部最好 Steve – Stevesb 2010-01-11 12:46:20
哎呀!! 解決了這個問題後,我現在看到我的'熔化'和'鑄造'沒有正確排列數據。 我會認爲,一旦結果和資源被正確排序,它會自動遵循,當熔化和鑄造它將保持有序。 並非如此。有沒有辦法確保融化和/或演員將實驗室視爲角色矢量,因爲在'b'上執行命令似乎也不起作用。 在此先感謝 – Stevesb 2010-01-11 12:57:24