R 根据匹配模式在2个数据帧中合并两列

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

我有两个数据帧

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:    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岁的孩子坐在我的脸上