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

在R中合并/加入data.frames的最快方法是什么?

例如(不确定是否最具代表性的例子):

N <- 1e6
d1 <- data.frame(x=sample(N,N), y1=rnorm(N))
d2 <- data.frame(x=sample(N,N), y2=rnorm(N))
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止所得到的:

d <- merge(d1,d2)
# 7.6 sec

library(plyr)
d <- join(d1,d2)
# 2.9 sec

library(data.table)
dt1 <- data.table(d1, key="x")
dt2 <- data.table(d2, key="x")
d <- data.frame( dt1[dt2,list(x,y1,y2=dt2$y2)] )
# 4.9 sec

library(sqldf)
sqldf()
sqldf("create index ix1 on d1(x)")
sqldf("create index ix2 on d2(x)")
d <- sqldf("select * from d1 inner join d2 on d1.x=d2.x")
sqldf()
# 17.4 sec
Run Code Online (Sandbox Code Playgroud)

performance merge join r data.table

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

如何从私有数据创建示例数据集(用无信息的占位符替换变量名称和级别)?

为了提供可重现的方法示例,通常必须提供数据集.我希望使用一些自己的数据,而不是构建示例数据集.但是这些数据无法发布.我希望用无信息的占位符替换变量(列)名称和因子级别(例如,V1 .... V5,L1 ...... L5).

这是一种自动化的方法吗?

理想情况下,这将在R中完成,接收data.frame并生成此匿名data.frame.

使用这样的数据集,只需在脚本中搜索和替换变量名称,就可以获得可公开发布的可重现的示例.

这样的过程可以增加在可重复的示例中包含适当的数据,甚至在问题,评论和错误报告中包含可重现的示例.

r

42
推荐指数
3
解决办法
4643
查看次数

标签 统计

r ×3

join ×2

merge ×2

data.table ×1

dataframe ×1

performance ×1

r-faq ×1