2012-03-10 88 views
0

我試圖做一個簡單的轉換。我用下面的代碼,它工作得很好:R:使用均值和sd函數進行標準化

data_stdz <- transform(data_header, z.v1 = v1+2) 

但是,我不能讓下面的代碼工作:

data_stdz <- transform(data_header, z.v1 = (v1 - mean(v1))/(2*sd(v1)) 

我也試圖讓剛剛平均功能工作:

data_stdz <- transform(data_header, z.v1 = mean(v1) 

不過,我不斷收到以下錯誤:

Error: unexpected symbol in: 
"data_std2 <- transform(data_header, z.v1 = mean(v1) 
data_std2" 

所以我猜它與我如何使用mean和sd函數有關,但我一直無法弄清楚。

數據例如:

v1 v2 v3 
6.7 3.8 1.2 
6.3 3.2 1.2 
6.1 2.6 1.6 
7 2.4 1 
NA NA NA 
6.5 3.6 2.6 
6.1 2.4 1.6 
6 5.6 5.2 
7 2.8 1 
6.7 3.8 1.4 
5.7 4.2 2.6 
5.1 5.6 5 
NA NA NA 
+2

該錯誤不會立即尖叫'mean()'或'sd()'給我。您在兩次'transform()'調用中都忽略了左括號。看起來這是問題的原因。 – 2012-03-10 20:30:31

+0

感謝您的加括號Gavin! – Tom 2012-03-10 20:56:56

+0

也值得看看'scale'功能。 – 2012-03-10 21:02:43

回答

1

你的問題很可能(在additon到所說的加文)設備。使用na.rm=TRUE如:

transform(data_header, z.v1 = (v1 - mean(v1, na.rm =T))/(2*sd(v1, na.rm =T))) 
+0

這工作,否則我得到所有新手。 – Tom 2012-03-10 20:56:36

+0

看看德克的建議吧。這可能是一個更好的方法來嘗試你的嘗試。和湯姆,當你遇到一個函數的問題(不知道你對R有多新奇)時,使用?function.name就像'?mean'一樣給你提供了一個很好的函數幫助文件,包括參數。在許多情況下,這是不正確的參數說明,導致錯誤。 – 2012-03-10 21:02:00

+0

R很新,但看到雙括號並不新鮮。感謝您的建議,因爲我查找有關平均函數的信息,並沒有幫助,但是「平均值」是。 – Tom 2012-03-10 21:19:07

2

基礎R具有用於此目的的scale()功能。

+0

儘管我的回答解答了海報的即時問題,但Dirks是一種更好的方法來處理您的嘗試。 「規模」有很多其他的論點,這使得這對於許多不同的任務來說非常方便。 – 2012-03-10 20:58:30

+0

我確實考慮過scale()函數,但不知道如何使用它來計算2 * sd。 – Tom 2012-03-10 21:12:01