2014-02-21 83 views
0

我意識到在R中可能沒有辦法做到這一點,因爲我的理解是矢量中的所有值都需要具有相同的數據類型。在R中的數據幀中組合兩種不同的數據類型

我有一個數據框有兩列,第一個是日期,第二個是當天給定股票的收盤價。我想在底部添加一行,第一列「SD」中的標籤以及價格變化的標準偏差值。

我能夠對標準偏差進行計算,但是,當我嘗試在底部的第一列中添加「SD」標籤時,R並不開心。第一列被格式化爲.Date,如果可能,我想保留它。如果沒有,我會至少喜歡它顯示看起來像一個日期,所以我可以輕鬆地讀取數據。

有沒有辦法做到這一點?

下面是一些樣本數據:

Date   AAPL  
1 2014-01-21 549.07 
2 2014-01-22 551.51 
3 2014-01-23 556.18 
4 2014-01-24 546.07 
5 2014-01-27 550.50 
6 2014-01-28 506.50 
7 2014-01-29 500.75 
8 2014-01-30 499.78 
9 2014-01-31 500.60 
10 2014-02-03 501.53 
11 2014-02-04 508.79 
12 2014-02-05 512.59 
13 2014-02-06 512.51 
14 2014-02-07 519.68 
15 2014-02-10 528.99 
16 2014-02-11 535.96 
17 2014-02-12 535.92 
18 2014-02-13 544.43 
19 2014-02-14 543.99 
20 2014-02-18 545.99 
21 2014-02-19 537.37 

我想它看起來像這樣,在最後一排的SD信息:

Date   AAPL  
1 2014-01-21 549.07 
2 2014-01-22 551.51 
3 2014-01-23 556.18 
4 2014-01-24 546.07 
5 2014-01-27 550.50 
6 2014-01-28 506.50 
7 2014-01-29 500.75 
8 2014-01-30 499.78 
9 2014-01-31 500.60 
10 2014-02-03 501.53 
11 2014-02-04 508.79 
12 2014-02-05 512.59 
13 2014-02-06 512.51 
14 2014-02-07 519.68 
15 2014-02-10 528.99 
16 2014-02-11 535.96 
17 2014-02-12 535.92 
18 2014-02-13 544.43 
19 2014-02-14 543.99 
20 2014-02-18 545.99 
21 2014-02-19 537.37 
22 SD   0.0217 

謝謝。

+1

這一切都取決於你想要做什麼。請告訴我們更多!爲什麼**必須** SD是日期列中的字符串?有很多創造性的選擇。 – smci

+0

如果您發現我的回答有用(或其他),請點擊'接受'。 – smci

回答

1

是的,你不能在一列中混合不同的類型(日期和字符串),你不能把'SD'混合到Date類型中。然而,這裏有一些可能性:

1)表示日期爲字符串,也允許'SD';這實際上可以與您的特定日期格式很好地配合使用yyyy-mm-dd,因爲排序順序是正確的。只要小心,這將擾亂ddply /聚合日期,除非你明確排除SD行(按行索引,或測試as.Date(...)轉換工作)。

2),或者你可以直接使用row.names得到你該字符串的標籤,它允許你直接訪問SD行作爲DF [ 'SD']:

# Lose any existing row.names 
row.names(df) = NULL 
# Now directly append your SD row when you compute it: 
df['SD',] = c('NA', sd(df$AAPL, na.rm=TRUE)) 
# Or else (less elegant) kludge the row.name onto existing SD row. 
row.names(df)[21] = 'SD' 
[1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13" "14" "15" "16" "17" 
[18] "18" "19" "20" "SD" 

劫持行像這樣的名稱可能是不好的形式和限制,因爲任何索引或變換操作,轉換爲矩陣/數組等都會丟棄'SD'。這是你的電話。顯然,我們在整個數據框中只能有一個'SD'行,所以我們不能做多個月。

3)或者你可以插入一個新的字符串列這將是除'SD'行以外的所有內容。這樣,您可以在不污染日期字段的情況下將SD行相當優雅地引用爲df [df $ SD =='SD',...]。將NA放入日期字段中,以便它不會被聚合拾取。這種方法可能更清潔,避免了選項2)的缺陷。另一個主要優點是將日期列保留爲日期類型(優點:能夠直接將任何日期函數應用於它;自動標記和排序)。讓我們從你是否可以將它整理成一個數據框並考慮你想要實現什麼的語法中退一步 - 這個'SD'條目的目的是什麼:一個標籤,一個行索引,一行或列以協助定位SD ...?

4)如果你只想顯示與SD行(而不是實際插入的數據幀的SD行)的表格,就可以實現與合計/ ddply /總結和/或

ddply(DF,(日),總結,SD = SD(AAPL))

所以說:這一切都取決於你想要做什麼。請告訴我們更多!

+0

感謝您的所有意見。最終目標是獲得一個csv文件,我可以在Excel中打開一個包含20天標準差的專欄文章。這可以在沒有我所問的所有問題的情況下完成,並且可能是我應該做的。我想將SD和日期結合起來的原因是爲了驗證數據,以確保任何股票都沒有數據點丟失。再次,這可能會降低,而不會將SD添加到數據幀。 – mks212

+0

選項4)然後(或1),如果你不介意將'日期'欄轉換爲字符串) – smci