R 当前是否可以移动data.table中的可变行数?
首先,我要感谢R包data.table的创建者和维护者 我有一个关于data.table中的“shift”功能的简单问题。 是否有办法不输入硬编码偏移量,而是输入存储在列中的可变偏移量?即,每行的偏移量可能不同 我在当前的文档中没有看到这方面的任何内容 非常感谢您的帮助 下面的代码不起作用,而是显示矢量:R 当前是否可以移动data.table中的可变行数?,r,data.table,shift,R,Data.table,Shift,首先,我要感谢R包data.table的创建者和维护者 我有一个关于data.table中的“shift”功能的简单问题。 是否有办法不输入硬编码偏移量,而是输入存储在列中的可变偏移量?即,每行的偏移量可能不同 我在当前的文档中没有看到这方面的任何内容 非常感谢您的帮助 下面的代码不起作用,而是显示矢量: DT[, Observation_Annual_Offset := shift(Observation, n = ifelse (Frequency == "A (Annual)", 1, i
DT[, Observation_Annual_Offset := shift(Observation, n = ifelse (Frequency == "A (Annual)", 1, ifelse (Frequency == "H (Half-yearly)", 2, ifelse (Frequency == "Q (Quarterly)", 4, ifelse(Frequency == "M (Monthly)", 12, 0)))), fill = NA, type = "lead")]
最好将频率存储在要引用的向量中,而不是使用多个ifelse:
你有一些样本数据吗?非常感谢,chinsoon12!是的,我以前创建了一个适当的列来存储偏移量,但我认为这个ifelse解决方案是硬编码解决方案和变量解决方案之间的中间方法。似乎让所有事情都起作用的诀窍是偏移量之后的一小部分:我猜它以某种方式迫使人们将偏移量解释为一个标量,而不是一个原子向量,不是吗?@Olivier7121它在每个组中使用偏移向量的第一个元素谢谢你,chinsoon12。我明白了,很好,我没有得到你表达式中的最后一个偏移量。它在group by中使用,因为我假设每个组只有一种频率
freq <- c("A (Annual)"=1, "H (Half-yearly)"=2, "Q (Quarterly)"=4, "M (Monthly)"=12)
DT <- data.table(Observation=rep(1:25, length(freq)), Offset=rep(names(freq), each=25))
DT[, Observation_Annual_Offset := shift(Observation, -freq[Offset[1L]]), Offset]
Observation Offset Observation_Annual_Offset
1: 1 A (Annual) 2
2: 2 A (Annual) 3
3: 3 A (Annual) 4
4: 4 A (Annual) 5
5: 5 A (Annual) 6
6: 6 A (Annual) 7
7: 7 A (Annual) 8
8: 8 A (Annual) 9
9: 9 A (Annual) 10
10: 10 A (Annual) 11
11: 11 A (Annual) 12
12: 12 A (Annual) 13
13: 13 A (Annual) 14
14: 14 A (Annual) 15
15: 15 A (Annual) 16
16: 16 A (Annual) 17
17: 17 A (Annual) 18
18: 18 A (Annual) 19
19: 19 A (Annual) 20
20: 20 A (Annual) 21
21: 21 A (Annual) 22
22: 22 A (Annual) 23
23: 23 A (Annual) 24
24: 24 A (Annual) 25
25: 25 A (Annual) NA
26: 1 H (Half-yearly) 3
27: 2 H (Half-yearly) 4
28: 3 H (Half-yearly) 5
29: 4 H (Half-yearly) 6
30: 5 H (Half-yearly) 7
31: 6 H (Half-yearly) 8
32: 7 H (Half-yearly) 9
33: 8 H (Half-yearly) 10
34: 9 H (Half-yearly) 11
35: 10 H (Half-yearly) 12
36: 11 H (Half-yearly) 13
37: 12 H (Half-yearly) 14
38: 13 H (Half-yearly) 15
39: 14 H (Half-yearly) 16
40: 15 H (Half-yearly) 17
41: 16 H (Half-yearly) 18
42: 17 H (Half-yearly) 19
43: 18 H (Half-yearly) 20
44: 19 H (Half-yearly) 21
45: 20 H (Half-yearly) 22
46: 21 H (Half-yearly) 23
47: 22 H (Half-yearly) 24
48: 23 H (Half-yearly) 25
49: 24 H (Half-yearly) NA
50: 25 H (Half-yearly) NA
51: 1 Q (Quarterly) 5
52: 2 Q (Quarterly) 6
53: 3 Q (Quarterly) 7
54: 4 Q (Quarterly) 8
55: 5 Q (Quarterly) 9
56: 6 Q (Quarterly) 10
57: 7 Q (Quarterly) 11
58: 8 Q (Quarterly) 12
59: 9 Q (Quarterly) 13
60: 10 Q (Quarterly) 14
61: 11 Q (Quarterly) 15
62: 12 Q (Quarterly) 16
63: 13 Q (Quarterly) 17
64: 14 Q (Quarterly) 18
65: 15 Q (Quarterly) 19
66: 16 Q (Quarterly) 20
67: 17 Q (Quarterly) 21
68: 18 Q (Quarterly) 22
69: 19 Q (Quarterly) 23
70: 20 Q (Quarterly) 24
71: 21 Q (Quarterly) 25
72: 22 Q (Quarterly) NA
73: 23 Q (Quarterly) NA
74: 24 Q (Quarterly) NA
75: 25 Q (Quarterly) NA
76: 1 M (Monthly) 13
77: 2 M (Monthly) 14
78: 3 M (Monthly) 15
79: 4 M (Monthly) 16
80: 5 M (Monthly) 17
81: 6 M (Monthly) 18
82: 7 M (Monthly) 19
83: 8 M (Monthly) 20
84: 9 M (Monthly) 21
85: 10 M (Monthly) 22
86: 11 M (Monthly) 23
87: 12 M (Monthly) 24
88: 13 M (Monthly) 25
89: 14 M (Monthly) NA
90: 15 M (Monthly) NA
91: 16 M (Monthly) NA
92: 17 M (Monthly) NA
93: 18 M (Monthly) NA
94: 19 M (Monthly) NA
95: 20 M (Monthly) NA
96: 21 M (Monthly) NA
97: 22 M (Monthly) NA
98: 23 M (Monthly) NA
99: 24 M (Monthly) NA
100: 25 M (Monthly) NA
Observation Offset Observation_Annual_Offset