R 根据匹配模式在2个数据帧中合并两列
我有两个数据帧 Df1 DF2 预期结果是: DF2 我想在df2中添加列R 根据匹配模式在2个数据帧中合并两列,r,dataframe,join,merge,data.table,R,Dataframe,Join,Merge,Data.table,我有两个数据帧 Df1 DF2 预期结果是: DF2 我想在df2中添加列Name,它对应于Col1和Col1bis中的相同模式。我们可以使用连接 library(data.table) setDT(DF2)[DF1, Name := Name, on = .(Col1bis = Col1)] DF2 # Col1bis Col2 Name #1: ALL1 OKI 10 #2: ALL2 OP 20 #3: ALL3 I 90 #4: ALL
Name
,它对应于Col1和Col1bis中的相同模式。我们可以使用连接
library(data.table)
setDT(DF2)[DF1, Name := Name, on = .(Col1bis = Col1)]
DF2
# Col1bis Col2 Name
#1: ALL1 OKI 10
#2: ALL2 OP 20
#3: ALL3 I 90
#4: ALL4 LOP 98
或者在
base R
中与匹配
DF2$Name <- DF1$Name[match(DF2$Col1bis, DF1$Col1)]
DF2$Name我们可以使用连接
library(data.table)
setDT(DF2)[DF1, Name := Name, on = .(Col1bis = Col1)]
DF2
# Col1bis Col2 Name
#1: ALL1 OKI 10
#2: ALL2 OP 20
#3: ALL3 I 90
#4: ALL4 LOP 98
或者在base R
中与匹配
DF2$Name <- DF1$Name[match(DF2$Col1bis, DF1$Col1)]
DF2$Name您需要做的是合并或“加入”您的数据集,这里有三种最常见的方法:l。首先,这是我测试的数据
# Dummy data
df1 <- data.frame(
V1 = letters[1:10],
V2 = rnorm(10, 0, 1))
df2 <- data.frame(
V1 = letters[c(1,4,6)],
V3 = rnorm(3, 0, 1))
接下来是使用tidyverse软件包和管道,%>%
,首先选择df1,然后使用右键连接()
函数,这是这些软件包中许多不同连接函数之一
# Tidyverse
library(tidyverse)
df1 %>% right_join(df2, by = "V1")
最后一个选项是我将使用的,来自data.table包。此处的连接变量由on=…
给出
# Data.table
library(data.table)
# - convert to data.tables
setDT(df1)
setDT(df2)
# - join
df1[df2, on = "V1"]
请注意,如果您以data.table的形式构建/读取数据(分别使用data.table()
和fread()
),则可以跳过转换步骤。您需要做的是合并或“连接”数据集,以下是三种最常用的方法:l。首先,这是我测试的数据
# Dummy data
df1 <- data.frame(
V1 = letters[1:10],
V2 = rnorm(10, 0, 1))
df2 <- data.frame(
V1 = letters[c(1,4,6)],
V3 = rnorm(3, 0, 1))
接下来是使用tidyverse软件包和管道,%>%
,首先选择df1,然后使用右键连接()
函数,这是这些软件包中许多不同连接函数之一
# Tidyverse
library(tidyverse)
df1 %>% right_join(df2, by = "V1")
最后一个选项是我将使用的,来自data.table包。此处的连接变量由on=…
给出
# Data.table
library(data.table)
# - convert to data.tables
setDT(df1)
setDT(df2)
# - join
df1[df2, on = "V1"]
请注意,如果您以data.table的形式构建/读取数据(分别使用data.table()
和fread()
),您可以跳过转换步骤。当然,我们可以在某个时候聊天谢谢-我会尝试找到一个机会窗口,您知道,在我的脸上没有一个1岁的sat sure,我们可以在某个时候聊天谢谢-我会努力找到一个机会,你知道,没有一个1岁的孩子坐在我的脸上