2013-10-31 47 views
0

價值觀,我有一個名爲列汽車密度(因素),它們就像我的大型數據集取代R中

"001: 0-3.8998943958" 
"061:2290.611052-2391.7437" 

我想每個範圍的中位數來替代這些。有近10000個觀測值。 我嘗試了很長的路: "1.9499"<-sb$CAR_Density[sb$CAR_Density == "001: 0-3.8998943958"],這沒有奏效。我不應該把「」放在1.9499上,因爲我希望結果值是數字。

有沒有一種高效且可以理解的方式來做到這一點? 我不擅長編程,請幫忙。

+0

什麼,根據你的,應該代碼' 「1.9499」< - sb $ CAR_Density [sb $ CAR_Density ==「001:0-3.8998943958」]'do? – TheComeOnMan

回答

0

我覺得你有它周圍走錯了路,你想

sb$CAR_Density[sb$CAR_Density == "001: 0-3.8998943958"] <- 1.9499 

如果你能告訴我們更多的關於您的數據,我們可以證明,中位替換每個唯一值的自動方法 - 但根據你的例子,我迷失了密度如何轉換爲中值。

+0

它是一個包含20個變量和10000個觀察值的數據集。其中一個變量名爲CAR_Density,有61個CAR_Density類型。每種類型的CAR_density均採用「001:0-3.8998943958」格式。其中001只是一個關鍵,它會上升到061.而0-3.89989是一個密度範圍。我想使用從0到3.89989的中間數字而不是整個「001:0-3.8998943958」。我想將其應用於其他60個CAR_Density類型。 – user2935184

0

我不知道你怎麼定義中位數,但我認爲你想達到這樣的事:

df <- data.frame(
    a = c("001: 0-3.8998943958","061:2290.611052-2391.7437") 
) 
df$a <- as.character(df$a) 
for(i in 1:nrow(df)) 
{ 
df[i,"a1"] <- as.numeric(unlist(strsplit(strsplit(df$a,":")[[i]][2],"-")))[1] 
df[i,"a2"] <- as.numeric(unlist(strsplit(strsplit(df$a,":")[[i]][2],"-")))[2] 
} 

df$amedian <- (df$a1 + df$a2)/2 

輸出

> df 
          a  a1   a2  amedian 
1  001: 0-3.8998943958 0.000 3.899894 1.949947 
2 061:2290.611052-2391.7437 2290.611 2391.743700 2341.177376 
+0

它是一個包含20個變量和10000個觀察值的數據集。其中一個變量名爲CAR_Density,有61個CAR_Density類型。每種類型的CAR_density均採用「001:0-3.8998943958」格式。其中001只是一個關鍵,它會上升到061.而0-3.89989是一個密度範圍。我想使用從0到3.89989的中間數字而不是整個「001:0-3.8998943958」。我想將其應用於其他60個CAR_Density類型。 – user2935184

+0

'df $ a'和你的'CAR_density'是同一列,那對嗎?中位數是「(0 + 3.89)/ 2」,是的? 「我想將其應用於其他60種CAR_Density類型」是什麼意思?「?如果您發佈樣本數據和預期的輸出,會更容易。 – TheComeOnMan

+0

「001:0-3.8998943958」,「002:3.8998943958-7.224696」,「003:7.2246968432-12.37135」,「004:12.37135867-16.160174」,「005:16.160174419-20.74777」......這些是原始因子數據,他們將上升到「061:2290.611052-2391.7437」。我想用數字替換這些因素,用1.9499替換「001:0-3.8998943958」,用(7.224696 + 3.89989)/ 2替換「002:3.8998943958-7.224696」,等等。此列名爲CAR_Density,數據名稱爲sb。最終,我會做多元迴歸,所以我喜歡CAR_Density是很好的數字數據。 – user2935184