r - 如何添加具有特定计算的列并根据 R 中的计算绘制图表?
问题描述
例如,我有以下数据集:
timestamp open close ID
2000 1000 1100 5
2060 1100 1150 5
2120 1150 1200 5
2180 1200 1150 5
2240 1150 1100 8
2300 1100 1000 8
2360 1000 950 8
2420 950 900 8
2480 900 950 5
2540 950 1000 5
2600 1000 1050 5
2660 1050 1100 4
2720 1100 1150 4
2780 1150 1200 4
如何添加另一个显示特定 ID 出现次数的列,这由 显示Number_ID
?以及如何添加另一列,该列给出自新 ID 开始以来的百分比变化。第一个打开是 ID 的开始,我们使用关闭来计算%_change
. 所以这看起来像这样(因为不必包括计算,我添加了它以便您可以看到计算):
timestamp open close ID Number_ID %_change
2000 1000 1100 5 1 10 (because (1100-1000)*100/1000)
2060 1100 1150 5 2 15 (because (1150-1000)*100/1000)
2120 1150 1200 5 3 20 (because (1200-1000)*100/1000)
2180 1200 1150 5 4 15 (because (1150-1000)*100/1000)
2240 1150 1100 8 1 -4 (because (1100-1150)*100/1150)
2300 1100 1000 8 2 -13 (because (1000-1150)*100/1150)
2360 1000 950 8 3 -17 (because (950-1150)*100/1150)
2420 950 900 8 4 -21 (because (900-1150)*100/1150)
2480 900 950 5 1 5 (because (950-900)*100/900)
2540 950 1000 5 2 11 (because (1000-900)*100/900)
2600 1000 1050 5 3 16 (because 1050-900)*100/900)
2660 1050 1100 4 1 4 (because (1100-1050)*100/1050)
2720 1100 1150 4 2 9 (because (1150-1050)*100/1050)
2780 1150 1200 4 3 14 (because (1200-1050)*100/1050)
当有这 2 列时,如何制作一个图表来绘制每个 ID 的最高正负百分比变化?因此,我首先需要添加一个计算方法,以计算ID的open
和之间的价格差异百分比。close
这看起来像这样:
timestamp open close ID Number_ID %_change %_change_opencloseID
2000 1000 1100 5 1 10
2060 1100 1150 5 2 15
2120 1150 1200 5 3 20
2180 1200 1150 5 4 15 15 (because (1150-1000)*100/1000)
2240 1150 1100 8 1 -4
2300 1100 1000 8 2 -13
2360 1000 950 8 3 -17
2420 950 900 8 4 -21 -21 (because (900-1150)*100/1150)
2480 900 950 5 1 5
2540 950 1000 5 2 11
2600 1000 1050 5 3 16 16 (because (1050-900)*100/900)
2660 1050 1100 4 1 4
2720 1100 1150 4 2 9
2780 1150 1200 4 3 14 14 (because (1200-1050)*100/1050)
如果我有这个,我怎样才能制作一个图表来自动绘制 ID 5 的 16% 变化而不是 ID 5 的 15% 变化?在timestamp
x 轴和%_change
y 轴上。
谢谢!
解决方案
这就是你如何做你的第一步:
library(dplyr)
df %>%
group_by(ID) %>%
mutate(Number_ID = row_number(),
perc_change = (close - first(open))/first(open) * 100)
# timestamp open close ID Number_ID perc_change
# <int> <int> <int> <int> <int> <dbl>
# 1 2000 1000 1100 5 1 10
# 2 2060 1100 1150 5 2 15
# 3 2120 1150 1200 5 3 20
# 4 2180 1200 1150 5 4 15
# 5 2240 1150 1100 8 1 -4.35
# 6 2300 1100 1000 8 2 -13.0
# 7 2360 1000 950 8 3 -17.4
# 8 2420 950 900 8 4 -21.7
# 9 2480 900 950 5 5 -5
#10 2540 950 1000 5 6 0
#11 2600 1000 1050 5 7 5
#12 2660 1050 1100 4 1 4.76
#13 2720 1100 1150 4 2 9.52
#14 2780 1150 1200 4 3 14.3
在data.table
:
library(data.table)
setDT(df)[, c("Number_ID", "perc_change") := list(seq_len(.N),
(close - first(open))/first(open) * 100), ID]
推荐阅读
- flutter - 火力基地的错误
- c - 为什么 AVFrame pts 值不会影响帧的比特率?
- curl - HTTP/1.1 401 未经授权
- rust - 如何通过 .iter().enumerate 借用索引回报,并且生锈的寿命更长
- java - 将类对象添加到 ArrayList 时无法解析符号“add”
- php - 在 XAMPP 中更改 MySQL 根密码
- r - 减少图例间距仅适用于 ggplt2 中的一种图例类型
- node.js - router.put 未显示正确的错误消息
- java - 在 Java 中为 pop() 方法抛出异常
- android - 尽管调用了 OnBindViewHolder,但未显示 RecyclewView 适配器中的项目