R 编程语言中的 VLOOKUP.目前正在Excel中进行VLOOKUP,仍然无法在R中获得所需的结果



R 编程语言中的 VLOOKUP - 问题陈述:我需要在 R 中执行 VLOOKUP,以获取月度报告。我目前正在 Excel 中执行此操作,但是,我想在 R 中执行此操作。

背景:

1.( df1 = 50,000 行/115 列 – 我要匹配的列:"account_number">

A.) df1$account_number

2.( df2 = 11,000 行/2 列 – 我要匹配的列:"account_number_1">

B.) df2$account_number_1

3.( df1$flag – 我想要一个"Y"或"N"来匹配 df1$account_number == df2$account_number_1

C.) df1$flag

研究尝试:

• 我一直在寻找、尝试和尝试编写我认为很容易的代码,但是,我不知道为什么这样做如此困难。

•我的搜索和试错导致了合并,匹配,复制和其他我不记得的方法,但没有一个能准确地满足我的需求。非常感谢有关我做错了什么和/或如何完成所需结果的 VLOOKUP 的任何帮助!谢谢!

我以为我会通过这个 StackOverflow 链接得到它,但是,我仍然无法获得预期的结果:

如何在 R 中进行 vlookup 和填充(如在 Excel 中(?

以下是我的搜索和脚本尝试:

合并: # 合并 2 个数据帧:

当两个数据框具有不同的列集时,按行 (rbind( 合并它们时,逐行合并 rbind-当它们具有不同的列集时

(仅供参考:cbind、left_join、inner_join - 都给我错误,但是,"智能绑定"有效!!(

df_merge <- smartbind(df1, df2)

我尝试 TRUE/FALSE – cbind 和 rbind# https://www.youtube.com/watch?v=NFaK1Qn4u3A - R 中的逻辑语句(TRUE/FALSE(和 cbind 和 rbind 命令(R 教程 1.9(

df_merge$flag <- df_merge$account_number == df_merge$account_number_1

https://www.youtube.com/watch?v=LKoknpFOEUw - 搜索"在 R 中如何匹配值"

duplicated(df_merge) which(duplicated(df_merge))

https://www.youtube.com/watch?v=eVEx_pBEkRI

df_merge$flag <- any(df_merge$account_number == df_merge$account_number_1)

任意(df_merge$account_number == df_merge$account_number_1(

if (which(duplicated(df_merge$account_number == df_merge$account_number_1))) {   df_merge$flag <- "Y" } else if (which(duplicated(df_merge$account_number != df_merge$account_number_1)) {   status <- "N" }

我尝试了这些链接,但迷路了:

如何在 R 中进行 vlookup 和填充(如在 Excel 中(?

http://stat.ethz.ch/R-manual/R-devel/library/base/html/match.html

match(x, table, nomatch = NA_integer_, incomparables = NULL)
x %in% table
df_match <- match(df_merge$account_number , df_merge$ account_number_1, nomatch=NA_integer_, incomparables=NULL)

你不需要合并任何东西。

df1$flag <- df1$account_number %in% df2$account_number_1

这将创建一列真/假值。对于您想做的任何事情来说,这应该足够了。如果必须具有"是/否"值:

df1$flag <- ifelse(df1$account_number %in% df2$account_number_1, "Yes", "No")

这是使用dplyrmagrittr(对于%>%( 包执行此操作的演示

library(dplyr)
library(magrittr)
df1 <- data.frame(AccountID = 1:3, AccountName = c("Superman", "Batman", "Joker"))
df2 <- data.frame(AccountID = 1:2, AccountBalance = c(1000, 1000000000))
# joining (or vlookup) to get account balance for all accounts
left_join(df1, df2, by = "AccountID") %>% mutate(Flag = ifelse(is.na(AccountBalance), "N", "Y"))
#   AccountID AccountName AccountBalance Flag
# 1         1    Superman          1e+03    Y
# 2         2      Batman          1e+09    Y
# 3         3       Joker             NA    N

希望这就是你要找的。如果没有,请共享一些示例数据和所需的输出。

如果要在第一个数据集中添加标志,则可以执行以下操作:

LOS_X <- c(1:10,21,22,33,44,55,66,69,77,78,88,89,90,91,92)
LOS_Y <- c(1:20)
LOS_X <- data.frame(LOS_X)
LOS_Y <- data.frame(LOS_Y)
names(LOS_X) <- "X"
names(LOS_Y) <- "Y"
LOS_Y$flag <- "Y" #To add to the dataset
LOS_new <- merge(LOS_X, LOS_Y, by.x = "X", by.y = "Y", all.x = TRUE) #You should have the column flag in the first dataset
LOS_new$flag <- ifelse(is.na(LOS_new$flag), "N", LOS_new$flag)

最新更新