R:通过键变量绑定列
Posted
技术标签:
【中文标题】R:通过键变量绑定列【英文标题】:R: Binding columns by key variable 【发布时间】:2018-08-15 23:57:40 【问题描述】:我想将df1
和df2
这两个数据框按x1
中的关键变量的不同组组合起来。它基本上是一些连接操作,但是,我不希望行重复,也不关心添加的列之间的关系。
假设:
df1
:
x1 x2
A 1
A 2
A 3
B 4
B 5
C 6
C 7
df2
:
x1 x3
A a
A b
A c
A d
A e
A f
B g
C h
结果应该是这样的。
df1
+ df2
:
x1 x2 x3
A 1 a
A 2 b
A 3 c
A NA d
A NA f
B 4 g
B 5 NA
C 6 h
C 7 NA
有人有想法吗?非常感谢您的帮助!
【问题讨论】:
【参考方案1】:dplyr 中的 full_join 也适用于此。见下文:
#recreate your data
library (data.table)
library (dplyr)
df1 <- data.table (x1 = c("A","A","A","B","B","C","C"), x2 = seq (from = 1, to = 7))
df2 <- data.table (x1 = c("A","A","A","A","A","A","B","C"), x3 = c("a","b","c","d","e","f","g","h" ))
df1[, rowid := rowid(x1)]
df2[, rowid := rowid(x1)]
df3 <- full_join (df1, df2, by = c ("x1","rowid"))
df3$rowid <- NULL
setorder (df3, x1)
【讨论】:
【参考方案2】:要复制生成的data.frame
,您可以通过x1
创建行ID,然后合并这些行ID 和x1
(但我真的不知道这是否是您想要完成的)
library(data.table)
df1 = read.table(text = "x1 x2
A 1
A 2
A 3
B 4
B 5
C 6
C 7", header = T)
df2 = read.table(text = "x1 x3
A a
A b
A c
A d
A e
A f
B g
C h", header = T)
setDT(df1)
setDT(df2)
df1[, rowid := seq(.N), by = x1] # create rowid
df2[, rowid := seq(.N), by = x1] # create rowid
merge(df1, df2, by = c("x1", "rowid"), all = T)[, rowid := NULL][]
x1 x2 x3
1: A 1 a
2: A 2 b
3: A 3 c
4: A NA d
5: A NA e
6: A NA f
7: B 4 g
8: B 5 NA
9: C 6 h
10: C 7 NA
【讨论】:
仅供参考,有一个功能:df1[, rowid := rowid(x1)]
非常感谢,这太棒了!以上是关于R:通过键变量绑定列的主要内容,如果未能解决你的问题,请参考以下文章
通过最大化 R data.table 中增加虚拟变量(列)分组的流行度来创建 CDF
带有 vim 键绑定和方法/变量完成的 Node.js REPL
R语言使用table1包绘制(生成)三线表使用单变量分列构建三线表编写自定义函数通过t检验为三线表添加p值列设置不显示overall数值
三线表是什么?R语言使用table1包绘制(生成)三线表使用单变量分列构建三线表通过topclass参数自定义三线表表格的显示形式(显示为类似斑马线并将所有列居中,包括包含行标签的第一列)