R 根据不同的变量将变量值重新编码为字符串

R 根据不同的变量将变量值重新编码为字符串,r,R,我有两个数据集: df1: df2: 我想根据df2中的值(val)和标签(lab)在df1中重新编码v1 接下来,我的输出应该如下所示: df3: 是否有任何我缺少的可以轻松解决此问题的包或函数?这个问题对我来说很容易,但我没有找到简单的解决办法。当然,编写for循环始终是可能的,但这可能会使此操作过于复杂,因为我想在大数据集上多次这样做。使用dplyr的选项将保持原始顺序 library(dplyr) new_df <- df1 %>% transmute(v1 = left_

我有两个数据集:

df1:

df2:

我想根据df2中的值(val)和标签(lab)在df1中重新编码v1

接下来,我的输出应该如下所示:

df3:


是否有任何我缺少的可以轻松解决此问题的包或函数?这个问题对我来说很容易,但我没有找到简单的解决办法。当然,编写for循环始终是可能的,但这可能会使此操作过于复杂,因为我想在大数据集上多次这样做。

使用
dplyr
的选项将保持原始顺序

library(dplyr)
new_df <- df1 %>% 
transmute(v1 = left_join(df1, df2, by = c("v1" = "val"))$lab)

#  v1   
#  <chr>
#1 a    
#2 d    
#3 c    
#4 g    
#5 h    
#6 a    
#7 b    
#8 d   

identical(new_df, df3)

#[1] TRUE

使用将保持原始顺序的
dplyr
选项

library(dplyr)
new_df <- df1 %>% 
transmute(v1 = left_join(df1, df2, by = c("v1" = "val"))$lab)

#  v1   
#  <chr>
#1 a    
#2 d    
#3 c    
#4 g    
#5 h    
#6 a    
#7 b    
#8 d   

identical(new_df, df3)

#[1] TRUE

下面是一个简单的解决方案:

X<-as.data.frame(df1)
Y<-as.data.frame(df2)

final_df <- merge(X, Y, all.x = TRUE, by.x = "v1", by.y = "val")
print(final_df)

这不会保持顺序,但使用
dplyr
的下面方法也会保持顺序

library(dplyr)

X<-as.data.frame(df1)
Y<-as.data.frame(df2)

final_df <- X %>% 
transmute(v1 = left_join(X, Y, by = c("v1" = "val"))$lab)
print(final_df)

我希望这有帮助,下面是一个简单的解决方案:

X<-as.data.frame(df1)
Y<-as.data.frame(df2)

final_df <- merge(X, Y, all.x = TRUE, by.x = "v1", by.y = "val")
print(final_df)

这不会保持顺序,但使用
dplyr
的下面方法也会保持顺序

library(dplyr)

X<-as.data.frame(df1)
Y<-as.data.frame(df2)

final_df <- X %>% 
transmute(v1 = left_join(X, Y, by = c("v1" = "val"))$lab)
print(final_df)

我希望这能有所帮助

我猜
df3$v1我猜
df3$v1这和我的答案有何不同?我在写作时没有看到你的答案,它几乎相似@Matt这和我的答案有何不同?我在写作时没有看到你的答案,它几乎相似@Matt
  v1 lab
1  1   a
2  1   a
3  2   b
4  3   c
5  4   d
6  4   d
7  7   g
8  8   h
library(dplyr)

X<-as.data.frame(df1)
Y<-as.data.frame(df2)

final_df <- X %>% 
transmute(v1 = left_join(X, Y, by = c("v1" = "val"))$lab)
print(final_df)
  v1
1  a
2  d
3  c
4  g
5  h
6  a
7  b
8  d