相关疑难解决方法(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万
查看次数

什么.SD代表R中的data.table

.SD看起来很有用,但我真的不知道我在做什么.它代表什么?为什么会有前一段时间(句号).我用它时发生了什么?

我读到: .SD是一个data.table包含x每个组的数据子集,不包括组列.它可以在分组i时,分组by,键控by和_ad hoc_时使用by

这是否意味着女儿data.table被留在内存中进行下一次操作?

r data.table

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

在data.table中设置密钥的目的是什么?

我正在使用data.table,并且有许多功能需要我设置密钥(例如X[Y]).因此,我希望了解密钥在我的数据表中正确设置密钥的作用.


我读过的一个来源是?setkey.

setkey()对a data.table进行排序并将其标记为已排序.排序列是关键.密钥可以是任何顺序的任何列.列始终按升序排序.该表通过引用更改.除了临时工作内存大到一列之外,根本不会复制.

我的理念是,一个键可以"排序"data.table,从而产生非常相似的效果order().但是,它没有解释拥有密钥的目的.


data.table FAQ 3.2和3.3解释了:

3.2我没有大桌子上的钥匙,但分组仍然非常快.这是为什么?

data.table使用基数排序.这比其他排序算法快得多.Radix仅用于整数,请参阅 ?base::sort.list(x,method="radix").这也是setkey()快速的原因之一 .如果没有设置密钥,或者我们按照与密钥不同的顺序进行分组,我们称之为ad hoc.

3.3为什么密钥中的列按比ad hoc更快的分组?

因为每个组在RAM中是连续的,从而最小化页面提取,并且可以批量复制内存(memcpy在C中)而不是在C中循环.

从这里开始,我想设置一个键以某种方式允许R使用"基数排序"而不是其他算法,这就是它更快的原因.


10分钟快速入门指南还有一个按键指南.

  1. 按键

让我们从考虑data.frame,特别是rownames(或英文,行名)开始.也就是说,属于单行的多个名称.属于单行的多个名称?这不是我们在data.frame中习惯的.我们知道每行最多只有一个名称.一个人至少有两个名字,第一个名字和第二个名字.这对于组织电话目录很有用,例如,按姓氏排序,然后是第一个名称.但是,data.frame中的每一行只能有一个名称.

密钥由一列或多列rownames组成,可以是整数,因子,字符或其他类,而不仅仅是字符.此外,行按键排序.因此,data.table最多只能有一个键,因为它不能以多种方式排序.

不强制执行唯一性,即允许重复键值.由于行按键排序,因此键中的任何重复项都将连续出现

电话簿有助于理解密钥是什么,但与具有因子列相比,似乎密钥没有区别.此外,它没有解释为什么需要密钥(特别是使用某些功能)以及如何选择要设置为密钥的列.此外,似乎在data.table中将time作为列,将任何其他列设置为键也可能会使时间列混乱,这使得它更加混乱,因为我不知道是否允许将任何其他列设置为键.有人可以开导我吗?

r data.table

107
推荐指数
2
解决办法
4万
查看次数

使用 data.table 模糊连接两个数据框

我一直致力于fuzzyjoin将 2 个数据帧连接在一起,但是由于连接导致的内存问题cannot allocate memory of…。所以我正在尝试使用data.table. 数据示例如下。

df1 看起来像:

        ID     f_date               ACCNUM    flmNUM start_date   end_date
1    50341 2002-03-08 0001104659-02-000656   2571187 2002-09-07 2003-08-30
2  1067983 2009-11-25 0001047469-09-010426  91207220 2010-05-27 2011-05-19
3   804753 2004-05-14 0001193125-04-088404   4805453 2004-11-13 2005-11-05
4  1090727 2013-05-22 0000712515-13-000022  13865105 2013-11-21 2014-11-13
5  1467858 2010-02-26 0001193125-10-043035  10640035 2010-08-28 2011-08-20
6   858877 2019-01-31 0001166691-19-000005  19556540 2019-08-02 2020-07-24
7     2488 2016-02-24 0001193125-16-476010 161452982 2016-08-25 2017-08-17
8  1478242 2004-03-12 0001193125-04-039482   4664082 2004-09-11 2005-09-03
9  1467858 2017-02-16 …
Run Code Online (Sandbox Code Playgroud)

r data.table fuzzyjoin

6
推荐指数
1
解决办法
703
查看次数

标签 统计

r ×4

data.table ×3

dataframe ×1

fuzzyjoin ×1

join ×1

merge ×1

r-faq ×1