使用不同的列名在for循环中左键联接

使用不同的列名在for循环中左键联接,r,for-loop,left-join,cran,R,For Loop,Left Join,Cran,我有一个名为a的data.frame,其结构类似于:- a <- data.frame(X1=c("A", "B", "C", "A", "C", "D"), X2=c("B", "C", "D", "A", "B", "A"), X3=c("C", "D", "A", "B", "A", "B") ) 如何使用for循环中的左连接来实现这一点???在基本R中,我们可以取消列出数据帧,并将其与b

我有一个名为
a
的data.frame,其结构类似于:-

a <- data.frame(X1=c("A", "B", "C", "A", "C", "D"),
                X2=c("B", "C", "D", "A", "B", "A"),
                X3=c("C", "D", "A", "B", "A", "B")
               )

如何使用for循环中的左连接来实现这一点???

在基本R中,我们可以
取消列出
数据帧,并
将其与
b$Xn
匹配,以获得相应的
特征值。我们可以
cbind
将此数据帧绑定到原始数据帧以获得最终答案

temp <- a
temp[] <- b$Feature[match(unlist(temp), b$Xn)]
names(temp) <- paste0('Feature', seq_along(temp))
cbind(a, temp)

#  X1 X2 X3 Feature1 Feature2 Feature3
#1  A  B  C     some     more     what
#2  B  C  D     more     what      why
#3  C  D  A     what      why     some
#4  A  A  B     some     some     more
#5  C  B  A     what     more     some
#6  D  A  B      why     some     more

这可以通过使用
mutate_all
recode
a
中的所有列进行编码来实现:

library(tidyverse)

a %>% 
  mutate_all(funs(feat=recode(., !!!set_names(as.character(b$Feature), b$Xn))))
您可以在
处添加一个
重命名\u以获得所需的名称:

a %>% 
  mutate_all(funs(f=recode(., !!!set_names(as.character(b$Feature), b$Xn)))) %>% 
  rename_at(vars(matches("f")), ~gsub(".([0-9]).*", "Feature\\1", .))
library(dplyr)
library(tidyr)

a %>%
  mutate(row = row_number()) %>%
  pivot_longer(cols = -row) %>%
  left_join(b, by = c('value' = 'Xn'))  %>%
  select(-value) %>%
  pivot_wider(names_from = name, values_from = Feature) %>%
  select(-row) %>%
  rename_all(~paste0('Feature', seq_along(.))) %>%
  bind_cols(a, .)
library(tidyverse)

a %>% 
  mutate_all(funs(feat=recode(., !!!set_names(as.character(b$Feature), b$Xn))))
  X1    X2    X3    X1_feat X2_feat X3_feat
1 A     B     C     some    more    what   
2 B     C     D     more    what    why    
3 C     D     A     what    why     some   
4 A     A     B     some    some    more   
5 C     B     A     what    more    some   
6 D     A     B     why     some    more
a %>% 
  mutate_all(funs(f=recode(., !!!set_names(as.character(b$Feature), b$Xn)))) %>% 
  rename_at(vars(matches("f")), ~gsub(".([0-9]).*", "Feature\\1", .))
  X1 X2 X3 Feature1 Feature2 Feature3
1  A  B  C     some     more     what
2  B  C  D     more     what      why
3  C  D  A     what      why     some
4  A  A  B     some     some     more
5  C  B  A     what     more     some
6  D  A  B      why     some     more