相关疑难解决方法(0)

为什么X [Y]连接data.tables不允许完全外连接或左连接?

这是关于data.table连接语法的一个哲学问题.我发现data.tables的用途越来越多,但仍在学习......

X[Y]data.tables 的连接格式非常简洁,方便和高效,但据我所知,它只支持内连接和右外连接.要获得左外部或全外部连接,我需要使用merge:

  • X[Y, nomatch = NA] - Y中的所有行 - 右外连接(默认)
  • X[Y, nomatch = 0] - 只有在X和Y中都匹配的行 - 内连接
  • merge(X, Y, all = TRUE) - 来自X和Y的所有行 - 完全外部连接
  • merge(X, Y, all.x = TRUE) - X中的所有行 - 左外连接

在我看来,如果X[Y]连接格式支持所有4种类型的连接,那将会很方便.有没有理由只支持两种类型的连接?

对我来说,nomatch = 0nomatch = NA参数值对于正在执行的操作不是非常直观.这是我更容易理解和记忆的merge语法:all = TRUE,all.x = TRUEall.y = TRUE.由于X[Y]操作类似于merge远远不止match,为什么不使用merge的连接,而不是语法match功能的nomatch参数?

以下是4种连接类型的代码示例:

# …
Run Code Online (Sandbox Code Playgroud)

join r data.table

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

我可以添加到R中的现有惰性数据库而无需重新创建所有内容吗?

我创建了一个数据库"mydb",当使用lazyLoad("mydb")在工作区中导入(大)data.frames X和Y.我创建了"mydb"将X和Y放在一个环境中e并使用命令tools:::makeLazyLoadDB(e,"mydb")

现在我创建了第三个data.frame Z(相当大).

如何将其添加到"mydb"而不必重新创建X和Y的惰性对象?

database lazy-loading r

35
推荐指数
1
解决办法
545
查看次数

动态构建查询多列的调用

如何使用字符向量变量作为参数动态查找多个字段并通过引用添加.在下面的情况下,我想查找两列并删除i.它们中的前缀.当然,他们可以覆盖具有相同名称的现有列.

library(data.table)
set.seed(1)
ID <- data.table(id = 1:3, meta = rep(1,3), key = "id")
JN <- data.table(idd = sample(ID$id, 3, FALSE), value = sample(letters, 3, FALSE), meta = rep(1,3), key = "idd")
select <- c("value","meta") # my fields to lookup
j.lkp <- call(":=", select, lapply(paste0("i.",select), as.symbol))
j.lkp
# `:=`(c("value", "meta"), list(i.value, i.meta))
ID[JN, eval(j.lkp)]
# Error in eval(expr, envir, enclos) : could not find function "i.value"
ID[JN, `:=`(c("value", "meta"), list(i.value, i.meta))]
#    id meta value
# …
Run Code Online (Sandbox Code Playgroud)

lookup r dynamic data.table

11
推荐指数
3
解决办法
386
查看次数

更新R中的数据帧行

假设我从数据框开始:

 ID Measurement1 Measurement2
  1           45          104
  2           34           87
  3           23           99
  4           56           67
...
Run Code Online (Sandbox Code Playgroud)

然后我有第二个数据框,用于更新第一个中的记录:

 ID Measurement1 Measurement2
  2           10           11
  4           21           22
Run Code Online (Sandbox Code Playgroud)

我如何使用R结束:

 ID Measurement1 Measurement2
  1           45          104
  2           10           11
  3           23           99
  4           21           22
...
Run Code Online (Sandbox Code Playgroud)

实际上数据帧是非常大的数据集.

r

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

在X [Y,j]合并的j中访问具有重复名称的Y列

假设我有这样的数据:

set.seed(1)
DT <- data.table(id=rep(1:3,each=3),y=1997L+sample(1:9,9))
DT2<- data.table(id=1:3,y=1997L+sample(1:3,3))
Run Code Online (Sandbox Code Playgroud)

我想在与DT合并后使用DT2 $ y.我看到这个列是y.1在合并后命名的

setkey(DT,id)
names(DT[DT2])
# [1] "id"  "y"   "y.1"
DT[DT2][,y.1]
# [1] 1998 1998 1998 2000 2000 2000 1999 1999 1999
Run Code Online (Sandbox Code Playgroud)

但是,我不能在j以下名称中使用它:

DT[DT2,y.1]
# Error in `[.data.table`(DT, DT2, y.1) : object 'y.1' not found
Run Code Online (Sandbox Code Playgroud)

我应该在这里使用的秘密前缀或后缀是什么?

r data.table

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

r - data.table join然后将所有列从一个表添加到另一个表

我的问题基本上与这个问题相同:data.table join然后将列添加到现有data.frame而不重新复制.

基本上我有一个带键的模板,我想通过相同的键将其他data.tables中的列分配给模板.

> template
    id1 id2
 1:   a   1
 2:   a   2
 3:   a   3
 4:   a   4
 5:   a   5
 6:   b   1
 7:   b   2
 8:   b   3
 9:   b   4
10:   b   5
> x
   id1 id2       value
1:   a   2  0.01649728
2:   a   3 -0.27918482
3:   b   3  0.86933718
> y
   id1 id2     value
1:   a   4 -1.163439
2:   b   4  2.267872
3:   b   5  1.083258
> template[x, value := i.value]
> template[y, …
Run Code Online (Sandbox Code Playgroud)

r data.table

4
推荐指数
1
解决办法
1105
查看次数

基于多个键和重复条目在R中连接两个data.tables

我试图在R base中加入两个data.tables,多个setkeys,并且重复输入.举个例子

>DT1
ID  state Month Day Year
1   IL    Jan   3   2013 
1   IL    Jan   3   2014
1   IL    Jan   3   2014
1   IL    Jan   10  2014
1   IL    Jan   11  2013
1   IL    Jan   30  2013
1   IL    Jan   30  2013
1   IL    Feb   2   2013
1   IL    Feb   2   2014
1   IL    Feb   3   2013
1   IL    Feb   3   2014

>DT2
state Month   Day   Year  Tavg
  IL    Jan    1    2013    13
  IL    Jan    2    2013    19
  IL …
Run Code Online (Sandbox Code Playgroud)

join r data.table

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

如何在合并时有条件地替换 R data.table 列?

我有以下两个 data.tables

library(data.table)

dt1 = data.table(index_column = c(12, 17, 29, 34, 46), column1 = c("dog", "cat", "bird", "elephant", "bird"), column2 = c(482, 391, 567, 182, 121))

dt2 = data.table(index_column = c(17, 29, 46), column1 = c("cat", "penguin", "bird"))

> dt1
   index_column  column1 column2
1:           12      dog     482
2:           17      cat     391
3:           29     bird     567
4:           34 elephant     182
5:           46     bird     121


> dt2
   index_column column1
1:           17     cat
2:           29 penguin
3:           46    bird
Run Code Online (Sandbox Code Playgroud)

将这两个 data.table 合并后仅与index_column …

merge replace r dataframe data.table

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

标签 统计

r ×8

data.table ×6

join ×2

database ×1

dataframe ×1

dynamic ×1

lazy-loading ×1

lookup ×1

merge ×1

replace ×1