相关疑难解决方法(0)

使用data.table进行左连接

假设我有两个data.table:

A:

  A  B
1: 1 12
2: 2 13
3: 3 14
4: 4 15
Run Code Online (Sandbox Code Playgroud)

B:

   A  B
1: 2 13
2: 3 14
Run Code Online (Sandbox Code Playgroud)

我有以下代码:

merge_test = merge(dataA, dataB, by="A", all.data=TRUE)
Run Code Online (Sandbox Code Playgroud)

我明白了:

   A B.x B.y
1: 2  13  13
2: 3  14  14
Run Code Online (Sandbox Code Playgroud)

但是,我想在最终合并表中的dataA中的所有行.有没有办法做到这一点?

merge r data.table

39
推荐指数
2
解决办法
3万
查看次数

基于多列中直接和间接相似性对变量进行分组的快速方法

我有一个相对较大的数据集(1,750,000行,5列),其中包含具有唯一ID值的记录(第一列),由四个条件(其他4列)描述。一个小例子是:

# example
library(data.table)
dt <- data.table(id=c("a1","b3","c7","d5","e3","f4","g2","h1","i9","j6"), 
                 s1=c("a","b","c","l","l","v","v","v",NA,NA), 
                 s2=c("d","d","e","k","k","o","o","o",NA,NA),
                 s3=c("f","g","f","n","n","s","r","u","w","z"),
                 s4=c("h","i","j","m","m","t","t","t",NA,NA))
Run Code Online (Sandbox Code Playgroud)

看起来像这样:

   id   s1   s2 s3   s4
 1: a1    a    d  f    h
 2: b3    b    d  g    i
 3: c7    c    e  f    j
 4: d5    l    k  n    m
 5: e3    l    k  n    m
 6: f4    v    o  s    t
 7: g2    v    o  r    t
 8: h1    v    o  u    t
 9: i9 <NA> <NA>  w <NA>
10: j6 <NA> <NA>  z <NA>
Run Code Online (Sandbox Code Playgroud)

我的最终目标是在任何描述列上查找所有具有相同字符的记录(不考虑NA),并将它们分组为新的ID,以便我可以轻松识别重复的记录。这些ID是通过串联每行的ID来构造的。 …

optimization loops r grepl data.table

13
推荐指数
2
解决办法
238
查看次数

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

说我有一个数据表:

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
查看次数

R:使用 dplyr 和 data.table 进行左连接的不同结果

我想知道为什么 data.table 的左连接没有给我多个匹配项,似乎有一些奇怪的内置“无重复”,这并不能真正使其成为左连接,不是吗?

数据

test=data.table(mtcars[1,])
test2=data.table(mtcars[c(1,1),])
Run Code Online (Sandbox Code Playgroud)

数据表

test[test2, on = c(carb = "carb"), wt2 := i.wt]
Run Code Online (Sandbox Code Playgroud)

dplyr

test %>% left_join(test2 %>% select(carb, wt) %>% rename(wt2 = wt), 
                       by = "carb")
Run Code Online (Sandbox Code Playgroud)

dplyr 给了我正确的两行结果,但 data.table 只给了我一行。这里发生了什么?

r left-join dplyr data.table

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

跟踪每一集的第一次发生

我目前正在使用 R 来处理如下所示的数据集:

age  ep  
 1    0   
 2    0   
 3    1   
 4    1   
 5    1   
 6    1   
 7    0   
 8    0   
 9    1   
10    1   
11    0   
Run Code Online (Sandbox Code Playgroud)

我想创建一个变量来跟踪每个 ep=1 系列中第一次出现的 ep=1。这些系列的第一个 ep=1 之前的 ep=0 和每个系列的最后一个 ep=1 之后的 ep=0。

我希望数据集在处理后看起来像这样:

 age  ep  first
 1    0   NA
 2    0   NA
 3    1   1
 4    1   NA
 5    1   NA
 6    1   NA
 7    0   NA
 8    0   NA
 9    1   1
10    1   NA
11    0   NA
Run Code Online (Sandbox Code Playgroud)

我在数据表中工作,因为这个数据集相当大,所以我更喜欢使用数据表的代码处理数据,但是如果这不可能,我可以转换为数据框并使用其他代码。任何帮助将不胜感激。

r data.table

3
推荐指数
1
解决办法
191
查看次数

R:使用另一个数据表的值更新数据表中的 NA

有如下结构的两个数据表:

 DT1 <- data.table(ID=c("A","B","C"), P0=c(1,10,100), key="ID")
 DT2 <- data.table(ID=c("B","B","B","A","A","A","C","C","C"), t=rep(seq(0:2),3), P=c(NA,30,50,NA,4,6,NA,200,700)) 
Run Code Online (Sandbox Code Playgroud)

在数据表中DT2,列中的所有 NAP应由P0数据表中的值更新DT1

如果DT2IDlike排序DT1,问题可以这样解决:

 setorder(DT2,ID)
 idxr <- which(DT2[["t"]]==1)
 set(DT2, i=idxr, j="P", value=DT1[["P0"]])
Run Code Online (Sandbox Code Playgroud)

但是数据表如何在没有事先排序的情况下“合并”DT2呢?

merge r na data.table

2
推荐指数
1
解决办法
1242
查看次数

标签 统计

data.table ×6

r ×6

merge ×2

dplyr ×1

grepl ×1

left-join ×1

loops ×1

na ×1

optimization ×1

time ×1