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