在R中的数据帧中组合两种不同的数据类型

在R中的数据帧中组合两种不同的数据类型,r,dataframe,R,Dataframe,我意识到在R中可能没有这样做的方法,因为我的理解是向量中的所有值都需要具有相同的数据类型 我有一个有两列的数据框,第一列是日期,第二列是给定股票在该日期的收盘价。我想在底部添加一行,第一列中有标签“SD”和价格变化的标准偏差值 我能够很好地计算标准偏差,但是,当我尝试在底部的第一列添加“SD”标签时,R不高兴。第一列的格式是.Date,如果可能的话,我希望保持这种格式。如果不是,我至少希望它显示得像日期,这样我就可以轻松地读取数据 有办法做到这一点吗 以下是一些示例数据: Date

我意识到在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

谢谢。

是的,您不能在一列中混合使用不同的类型(日期和字符串),也不能将“SD”混入日期类型。然而,这里有一些可能性:

1)也将日期表示为字符串,也允许使用“SD”;这实际上可以很好地与您的特定日期格式yyyy mm dd配合使用,因为排序顺序是正确的。请注意,除非您明确排除SD行(按行索引,或测试as.date(…)转换是否有效),否则这将打乱ddply/聚合日期的过程

2) 或者您可以直接使用row.names获取该字符串标签,该标签允许您以df['SD',]的形式直接访问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"
像这样劫持row.names可能是不好的形式和限制,因为任何索引或转换操作、到矩阵/数组等的转换都会删除“SD”。由你决定。显然,我们在整个数据帧中只能有一个“SD”行,所以我们不能做多个月

3) 或者您可以插入一个新的字符串列,除了“SD”行之外,其他所有行都将是“”。这样,您就可以相当优雅地引用SD行作为df[df$SD=='SD',…],而不会污染日期字段。将NA放在日期字段中,这样它就不会被聚合拾取。这种方法可能更干净,避免了选项2)的陷阱。另一个主要优点是将“日期”列保留为日期类型(优点:能够直接对其应用任何日期函数;自动打印标签和排序)

让我们从您是否可以把它装入数据框的语法中退一步,并考虑您正在尝试实现什么——这个“SD”项的目的究竟是什么:标签、行索引、行或列以帮助定位SD……/P> 4) 如果您只想显示带有SD行的表(而不是在数据帧中实际插入SD行),可以使用aggregate/ddply/summary和/或table实现

ddply(df,日期,汇总,SD=SD(AAPL))


所以:这完全取决于你到底想做什么。告诉我们更多

这完全取决于你到底想做什么。告诉我们更多!为什么SD必须是日期列中的字符串?有很多有创意的选择。如果你觉得我的答案有用(或任何其他),请单击“接受”。谢谢你的评论。最终的目标是得到一个csv文件,我可以在excel中打开它,其中有一列代码和一列20天的SD。这不需要我问的所有问题,也可能是我应该做的。我之所以想将SD和date结合起来,是为了数据验证,以确保任何股票都不缺少数据点。同样,如果您不介意将“日期”列转换为字符串,可以在不将SD添加到数据帧的情况下关闭此选项。选项4)然后(或者1)