如何使用“合并不同名称的列”;merge,by=Column.name";功能?

如何使用“合并不同名称的列”;merge,by=Column.name";功能?,r,merge,rstudio,R,Merge,Rstudio,#数据1 您可以使用sqldf库执行此操作: library(sqldf); sqldf("SELECT data1.SampledId, data1.Vlaue, data2.Value2 FROM data1 JOIN data2 on data1.SampleID like data1.SampleID + '-%'") 或者使用数据。表类似于以下内容: library(data.table) dt1 <- data.table(data1) dt2 <- data.ta

#数据1


您可以使用
sqldf
库执行此操作:

library(sqldf); 
sqldf("SELECT data1.SampledId, data1.Vlaue, data2.Value2 FROM data1 JOIN data2 on data1.SampleID like data1.SampleID + '-%'")
或者使用
数据。表类似于以下内容:

library(data.table) 
dt1 <- data.table(data1)
dt2 <- data.table(data2)
dt1[dt2, on = .(grepl(CustomerId, CustomerId)), all = TRUE]
库(data.table)

dt1您可以使用
sqldf
库:

library(sqldf); 
sqldf("SELECT data1.SampledId, data1.Vlaue, data2.Value2 FROM data1 JOIN data2 on data1.SampleID like data1.SampleID + '-%'")
或者使用
数据。表类似于以下内容:

library(data.table) 
dt1 <- data.table(data1)
dt2 <- data.table(data2)
dt1[dt2, on = .(grepl(CustomerId, CustomerId)), all = TRUE]
库(data.table)

dt1我相信以下内容可以满足您的需要

data1$NewID <- gsub("[^[:alpha:]]", "", data1$SampleID)
result <- merge(data1, data2, by.x = "NewID", by.y = "SampleID", all = TRUE)
result <- result[-1]
result
#  SampleID Value Value1
#1     A-01     1      3
#2     B-01     2      4
#3     C-01     3      5

我相信以下是你所需要的

data1$NewID <- gsub("[^[:alpha:]]", "", data1$SampleID)
result <- merge(data1, data2, by.x = "NewID", by.y = "SampleID", all = TRUE)
result <- result[-1]
result
#  SampleID Value Value1
#1     A-01     1      3
#2     B-01     2      4
#3     C-01     3      5

您可以首先从data1拆分SampleID,然后将其连接起来

SampleID <- c("A-01","B-01","C-01")
Sample <- substr(SampleID,1,1)
Num <- substr(SampleID,3,5)
Value <- c(1,2,3)
data1 <- data.frame(Sample ,Num, Value )

SampleID <- c("A","B","C")
Value1 <- c(3,4,5)
data2 <- data.frame(SampleID, Value1)

merged <- merge(data1, data2, by.x = "Sample", by.y = "SampleID", all = T )
merged$SampleID <- paste(merged$Sample,merged$Num, sep = "-")
merged <- merged[,c(5,3,4)]

  SampleID Value Value1
1     A-01     1      3
2     B-01     2      4
3     C-01     3      5

SampleID您可以首先将SampleID从data1中拆分,然后将其连接起来

SampleID <- c("A-01","B-01","C-01")
Sample <- substr(SampleID,1,1)
Num <- substr(SampleID,3,5)
Value <- c(1,2,3)
data1 <- data.frame(Sample ,Num, Value )

SampleID <- c("A","B","C")
Value1 <- c(3,4,5)
data2 <- data.frame(SampleID, Value1)

merged <- merge(data1, data2, by.x = "Sample", by.y = "SampleID", all = T )
merged$SampleID <- paste(merged$Sample,merged$Num, sep = "-")
merged <- merged[,c(5,3,4)]

  SampleID Value Value1
1     A-01     1      3
2     B-01     2      4
3     C-01     3      5

SampleID要添加到集合中,这里有一个
dplyr
解决方案,读起来更简单一些:

options(stringsAsFactors = F)
SampleID <-c("A-01","B-01","C-01")
Value <- c(1,2,3)
data1 <- data.frame(SampleID, Value)

SampleID <- c("A","B","C")
Value1 <- c(3,4,5)
data2 <- data.frame(SampleID,Value1)

data1 %>% 
  mutate(new_id = gsub("[^[:alpha:]]", "", SampleID)) %>% 
  left_join(., data2, by = c("new_id" = "SampleID")) %>% 
  select(-new_id)

  SampleID Value Value1
1     A-01     1      3
2     B-01     2      4
3     C-01     3      5
选项(stringsAsFactors=F)

SampleID要添加到集合中,这里有一个
dplyr
解决方案,读起来更简单一些:

options(stringsAsFactors = F)
SampleID <-c("A-01","B-01","C-01")
Value <- c(1,2,3)
data1 <- data.frame(SampleID, Value)

SampleID <- c("A","B","C")
Value1 <- c(3,4,5)
data2 <- data.frame(SampleID,Value1)

data1 %>% 
  mutate(new_id = gsub("[^[:alpha:]]", "", SampleID)) %>% 
  left_join(., data2, by = c("new_id" = "SampleID")) %>% 
  select(-new_id)

  SampleID Value Value1
1     A-01     1      3
2     B-01     2      4
3     C-01     3      5
选项(stringsAsFactors=F)

SampleID使用参数
by.x
by.y
。那么您想将行
A-01
与行
A
合并,等等?如果是这样,您必须首先使这些值相等,用
gsub
创建一个新列。使用参数
by.x
by.y
。因此您想将行
a-01
与行
a
合并,等等?如果是这样,您必须首先使这些值相等,使用
gsub
创建一个新列。