我的數據被設置爲這樣:創建一個數據幀
site date amb ppm1 ppm2 ppm3 time0 time1 time2 time3
A 5/6/12 350 370 380 385 0 3 6 9
我需要它有2列(一個是濃度和其他時間)
conc time
350 0
370 3
380 6
385 9
,這樣我可以格式對其進行迴歸。或者幫助如何對原始設置進行迴歸會很好。
我的數據被設置爲這樣:創建一個數據幀
site date amb ppm1 ppm2 ppm3 time0 time1 time2 time3
A 5/6/12 350 370 380 385 0 3 6 9
我需要它有2列(一個是濃度和其他時間)
conc time
350 0
370 3
380 6
385 9
,這樣我可以格式對其進行迴歸。或者幫助如何對原始設置進行迴歸會很好。
您應該使用正則表達式來分割字符串以獲得您的兩個向量(濃度和時間)。如果您使用的是R,您只需致電
data.frame(concentration=concentration,time=time)
您的兩個向量創建一個數據幀。
使用您的樣本數據,並假設你data.frame
被稱爲「myDF上」,您可以使用stack
每個列的「設置」,讓你顯示輸出:採用
setNames(data.frame(stack(mydf[, grep("^ppm|^amb", names(mydf))])[-2],
stack(mydf[, grep("^time", names(mydf))])[-2]),
c("conc", "time"))
# conc time
# 1 350 0
# 2 370 3
# 3 380 6
# 4 385 9
grep
,只是作爲一個例子,如果您有許多具有相似名稱的列並且不想計數來識別其列索引。如果這確實代表了您的數據,stack
也可能只是stack(mydf[, 3:6])[-2]
和stack(mydf[, 7:10])
。setNames
只是一個方便的功能來重新命名輸出中的列名稱。[-2]
只是從每個stack
命令(它是從中取值的列名稱列)中刪除第二列。另一種選擇,如果你不介意改變「反導」的變量名「ppm0」是使用reshape
:
names(mydf)[3] <- "ppm0"
reshape(mydf, direction = "long", idvar = 1:2,
timevar = "measure", varying = 3:ncol(mydf), sep = "")
# site date measure ppm time
# A.5/6/12.0 A 5/6/12 0 350 0
# A.5/6/12.1 A 5/6/12 1 370 3
# A.5/6/12.2 A 5/6/12 2 380 6
# A.5/6/12.3 A 5/6/12 3 385 9
你可以,當然,降前三列很容易。
如果你的數據是一個向量:
> mydata <- c("A", "5/6/12", 350, 370, 380, 385, 0, 3, 6, 9)
你的名字說:
> names(mydata) <- c("site", "date", "amb" ,"ppm1","ppm2","ppm3","time0","time1","time2","time3")
就有點像你在上面描述:
> mydata
site date amb ppm1 ppm2 ppm3 time0 time1 time2 time3
"A" "5/6/12" "350" "370" "380" "385" "0" "3" "6" "9"
,並改造它,你可以這樣做:
> data.frame(conc=mydata[3:6],time=mydata[7:10])
這將導致
conc time
amb 350 0
ppm1 370 3
ppm2 380 6
ppm3 385 9
這是你犯了一個非常重大的假設,該數據是單一載體。從您的示例輸入中可以看出,所有內容都被強制轉換爲字符,但它們不在OP數據中。 – A5C1D2H2I1M1N2O1R2T1
@AnandaMahto這只是我嘗試重現OP的數據結構的方式,他沒有指定他從哪裏複製數據輸入。如果引號很麻煩,可以將它們添加爲「factor」。我只是補充一點,以防它可能是一個簡單的問題,作爲替代方案。 – user2276428
沒問題。有替代品永遠是好事。我的觀點主要是你在回答中做出了一個很大的假設。不幸的是,OP似乎是一個屢試不爽的用戶,所以我們可能永遠不知道他們的數據的實際結構的真相:) – A5C1D2H2I1M1N2O1R2T1