2014-02-21 52 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