说我有一个数据表:
dt <- data.table(
datetime = seq(as.POSIXct("2016-01-01 00:00:00"),as.POSIXct("2016-01-01 10:00:00"), by = "1 hour"),
ObType = c("A","A","B","B","B","B","A","A","B","A","A")
)
dt
datetime ObType
1: 2016-01-01 00:00:00 A
2: 2016-01-01 01:00:00 A
3: 2016-01-01 02:00:00 B
4: 2016-01-01 03:00:00 B
5: 2016-01-01 04:00:00 B
6: 2016-01-01 05:00:00 B
7: 2016-01-01 06:00:00 A
8: 2016-01-01 07:00:00 A
9: 2016-01-01 08:00:00 B
10: 2016-01-01 09:00:00 A
11: 2016-01-01 10:00:00 A
Run Code Online (Sandbox Code Playgroud)
我需要做的是在ObType为"B"的任何地方,我需要找到两边最近的ObType"A"的时间.所以结果应该是(几个小时):
datetime ObType timeLag timeLead
1: 2016-01-01 00:00:00 A NA NA
2: 2016-01-01 01:00:00 A NA …Run Code Online (Sandbox Code Playgroud) 注意到data.table的一些奇怪的行为,希望有人比我能解释的更了解data.table.
说我有这个data.table:
library(data.table)
DT <- data.table(
C1 = c(rep("A", 4), rep("B",4), rep("C", 4)),
C2 = c(rep("a", 3), rep("b",3), rep("c",3), rep("d",3)),
Val = c(1:5, NaN, NaN, 8,9,10,NaN,12))
DT
C1 C2 Val
1: A a 1
2: A a 2
3: A a 3
4: A b 4
5: B b 5
6: B b NaN
7: B c NaN
8: B c 8
9: C c 9
10: C d 10
11: C d NaN
12: C d 12
Run Code Online (Sandbox Code Playgroud)
现在,在我看来,以下两种方法应该生成相同的结果,但它们不会.
TEST1 …Run Code Online (Sandbox Code Playgroud) 我已经看到了解决这个问题的方法,但无法让它适用于群组(在时间序列中只填充有限数量的NA),并且认为必须有更简洁的方法来执行此操作?
说我有以下dt:
dt <- data.table(ID = c(rep("A", 10), rep("B", 10)), Price = c(seq(1, 10, 1), seq(11, 20, 1)))
dt[c(1:2, 5:10), 2] <- NA
dt[c(11:13, 15:19) ,2] <- NA
dt
ID Price
1: A NA
2: A NA
3: A 3
4: A 4
5: A NA
6: A NA
7: A NA
8: A NA
9: A NA
10: A NA
11: B NA
12: B NA
13: B NA
14: B 14
15: B NA
16: B …Run Code Online (Sandbox Code Playgroud) 假设我有一个 df:
df <- data.frame(flag = c(rep(0, 20)),
include = c(rep(1, 20)))
df[c(4,8,16), ]$flag <- 1
df
flag include
1 0 1
2 0 1
3 0 1
4 1 1
5 0 1
6 0 1
7 0 1
8 1 1
9 0 1
10 0 1
11 0 1
12 0 1
13 0 1
14 0 1
15 0 1
16 1 1
17 0 1
18 0 1
19 0 1
20 0 1
Run Code Online (Sandbox Code Playgroud)
我想要做的是, …
比方说,我有5个人A:E的数据.这些人提供了他们愿意以四个频段以什么价格购买的数量的信息.数据格式宽泛.
df = cbind.data.frame(Q1 = c(90,50,20,10,10), Q2 = c(110,0,0,0,0),
Q3 = c(60,60,50,20,5), Q4 = c(20,10,0,0,0),
P1 = 2:6, P2 = c(3,6,8,9,10),
P3 = c(2,3,5,7,9), P4 = 1:5)
row.names(df) = LETTERS[1:5]
Run Code Online (Sandbox Code Playgroud)
(我的实际数据集在很多时间段内对个人有很多观察,并且有更多的乐队).
我想要做的是为每个人,他们愿意在特定价格类别内购买的数量求和.
假设我想要以0美元和5美元之间的任何价格总结个人愿意消费的所有数量,并且类似地在5美元到10美元之间的价格类别.使用excel我会使用一个简单的'sumifs'来做到这一点.
我怎么能在R中这样做?
我期望从上面的数据输出将是:
0<P<=5 5<P<=10
A 280 0
B 120 0
C 70 0
D 10 20
E 0 15
Run Code Online (Sandbox Code Playgroud)
我通常一直在使用data.table,所以如果有人知道使用这个软件包的解决方案会很好.我也试过通过重塑数据来做到这一点,但它变得太大而无法处理(警告消息等),所以它需要保持这种格式.
谢谢!