小编Lys*_*cks的帖子

找出每行最接近特定值的时间

说我有一个数据表:

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)

time r data.table

11
推荐指数
1
解决办法
219
查看次数

在处理NaN时,data.table"list"与":="

注意到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)

r data.table

10
推荐指数
1
解决办法
173
查看次数

na.locf填充NAs到maxgap即使gap> maxgap,也有组

我已经看到了解决这个问题的方法,但无法让它适用于群组(在时间序列中只填充有限数量的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)

r na data.table

7
推荐指数
1
解决办法
453
查看次数

在另一列中的特定值之前和之后标记观察结果

假设我有一个 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)

我想要做的是, …

r dplyr data.table

5
推荐指数
1
解决办法
417
查看次数

R:如果另一行数组满足条件(如excel,但在R中),则对一行数组求和

比方说,我有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,所以如果有人知道使用这个软件包的解决方案会很好.我也试过通过重塑数据来做到这一点,但它变得太大而无法处理(警告消息等),所以它需要保持这种格式.

谢谢!

r sumifs data.table

-1
推荐指数
1
解决办法
143
查看次数

标签 统计

data.table ×5

r ×5

dplyr ×1

na ×1

sumifs ×1

time ×1