相关疑难解决方法(0)

如何加入(合并)数据框(内部,外部,左侧,右侧)?

给出两个数据框:

df1 = data.frame(CustomerId = c(1:6), Product = c(rep("Toaster", 3), rep("Radio", 3)))
df2 = data.frame(CustomerId = c(2, 4, 6), State = c(rep("Alabama", 2), rep("Ohio", 1)))

df1
#  CustomerId Product
#           1 Toaster
#           2 Toaster
#           3 Toaster
#           4   Radio
#           5   Radio
#           6   Radio

df2
#  CustomerId   State
#           2 Alabama
#           4 Alabama
#           6    Ohio
Run Code Online (Sandbox Code Playgroud)

我怎样才能做数据库风格,即sql风格,加入?也就是说,我该怎么做:

  • 一个内连接df1df2:
    只返回行中左表在右表匹配的密钥.
  • 一个外连接df1df2:
    返回两个表中的所有行,从有右表中的匹配键左连接记录.
  • 甲 …

merge join r dataframe r-faq

1155
推荐指数
13
解决办法
108万
查看次数

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

data.table join然后将列添加到现有data.frame而不重新复制

我有两个data.tables,X(3米行乘500列)和Y(100行乘两列).

set.seed(1)
X <- data.table( a=letters, b=letters, c=letters, g=sample(c(1:5,7),length(letters),replace=TRUE), key="g" )
Y <- data.table( z=runif(6), g=1:6, key="g" )
Run Code Online (Sandbox Code Playgroud)

我想在X上做一个左外连接,我可以做到Y[X]这一点,感谢:

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

但我想在X 复制的情况下添加新列X(因为它很大).

显然,像X <- Y[X]作品这样的东西,但除非data.table比我给它的功劳更加明确(并且我非常狡猾地给予它赞美!),我相信这复制了整个X.

X[ , z:= Y[X,z]$z ] 虽然工作正常,但却不能很好地扩展到多个列.

如何将合并的结果以有效的方式(在副本方面和程序员时间方面)存储回保留的data.table中?

join copy r reference data.table

19
推荐指数
2
解决办法
4154
查看次数

外联接data.table R.

只是想知道是否有一种有效的方法来与数据表进行外连接,例如

a <- data.table(a=c(1,2,3),b=c(3,4,5))
b <- data.table(a=c(1,2),k=c(1,2))
merge(a,b,by="a",all.x=T)
Run Code Online (Sandbox Code Playgroud)

这样可以正常工作,但它没有内部连接那么高效,因为下面的运行速度非常快,但上面的速度非常慢.

setkey(a,a)
setkey(b,a)
a[b,]
Run Code Online (Sandbox Code Playgroud)

r data.table

12
推荐指数
1
解决办法
9662
查看次数

某些条件下的累计和

这是我的数据框:

       X   Y  Date   Qty  CumSumA  CumSumB
    1  A   B   1/1     1        1        0
    2  A   A   1/1     2        3        2
    3  A   E   1/1     2        5        2
    4  B   A   1/1     1        1        1
    5  B   B   1/1     3        4        4
    6  B   C   1/1     2        6        4
    7  C   D   1/1     2        2        2
    8  C   E   1/1     4        6        2
    9  C   A   1/1     1        7        2
   10  A   C   1/2     2        2        0
   11  A   D …
Run Code Online (Sandbox Code Playgroud)

r dplyr

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

通过data.table roll='nearest'函数合并两组数据

我有两组数据。

样本set_A(总行数:45467):

ID_a    a1  a2  a3  time_a
2   35694   5245.2  301.6053    00.00944
3   85694   9278.9  301.6051    23.00972
4   65694   9375.2  301.6049    22.00972
5   85653   4375.5  301.6047    19.00972
6   12694   5236.3  301.6045    22.00972
7   85697   5345.2  301.6043    21.00972
8   85640   5274.1  301.6041    20.01000
9   30694   5279.0  301.6039    20.01000
Run Code Online (Sandbox Code Playgroud)

样本set_B(总行数:4798):

ID_b    b1  b2  source  time_b
2   34.20   15.114  set1.csv.1  20.35750
7   67.20   16.114  set1.csv.2  21.35778
12  12.20   33.114  set1.csv.3  22.35806
17  73.20   67.114  set2.csv.1  23.35833
23  88.20   42.114 …
Run Code Online (Sandbox Code Playgroud)

merge r data.table

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

带双面卷(LOCF)的全外接头

如何有效地合并两个data.tables与全外连接,同时处理左侧和右侧滚动最后一次观察前进(LOCF)的缺失值?

现实世界中的应用 -有两个不一定交织交易规则信号表X,Y,控股(稀疏的一段时间内)的信号值.总体目标是定义复合信号,其中Signal.z = Signal.x AND Signal.y

X <- data.table(Instrument=rep("SPX",3)
                , Date=as.IDate(c("2013-11-20","2013-11-22","2013-11-24"))
                , Signal=c(TRUE,FALSE,TRUE), key=c("Instrument", "Date"))

Y <- data.table(Instrument=rep("SPX",3)
                , Date=as.IDate(c("2013-11-21","2013-11-23","2013-11-25"))
                , Signal=c(FALSE,TRUE,FALSE), key=c("Instrument", "Date"))
Run Code Online (Sandbox Code Playgroud)

期望的结果:

   Instrument       Date Signal.x Signal.y Signal.z
1:        SPX 2013-11-20     TRUE       NA       NA
2:        SPX 2013-11-21     TRUE    FALSE    FALSE
3:        SPX 2013-11-22    FALSE    FALSE    FALSE
4:        SPX 2013-11-23    FALSE     TRUE    FALSE
5:        SPX 2013-11-24     TRUE     TRUE     TRUE
6:        SPX 2013-11-25     TRUE    FALSE    FALSE
Run Code Online (Sandbox Code Playgroud)

r full-outer-join data.table

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

标签 统计

r ×7

data.table ×5

merge ×3

join ×2

copy ×1

dataframe ×1

dplyr ×1

full-outer-join ×1

r-faq ×1

reference ×1