VLOOKUP на языке программирования R.В настоящее время занимаюсь VLOOKUP в Excel, до сих пор не могу получить желаемых результатов в R - PullRequest
0 голосов
/ 24 сентября 2018

VLOOKUP на языке программирования R - постановка задачи: мне нужно выполнить VLOOKUP на языке R для ежемесячных отчетов.В настоящее время я делаю это в 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, однако я все еще не могу получить желаемые результаты:

Как сделать vlookup и заполнить (как в Excel)в R?

Вот мои поиски и попытки сценариев:

Слияние: # COMBINE 2 Кадры данных:

Объединение двух кадров данных по строкам (rbind) когда они имеют разные наборы столбцов by-row-rbind-когда-они-имеют-разные-наборы столбцов

(FYI: cbind, left_join, inner_join - все выдают мне ошибки,однако "smartbind" РАБОТАЕТ !!!)

df_merge <- smartbind(df1, df2)

Моя попытка ИСТИНА / ЛОЖЬ - cbind и rbind # https://www.youtube.com/watch?v=NFaK1Qn4u3A - Логические операторы (ИСТИНА / ЛОЖЬ) и команды cbind и rbind вR (R Tutorial 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" }

Я попытался эти ссылки, и потерял:

Как сделать vlookup и заполнить сделатьwn (как в Excel) в R?

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)

Ответы [ 3 ]

0 голосов
/ 24 сентября 2018

Вот демонстрация этого с использованием пакетов dplyr и magrittr (для %>%)

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

Надеюсь, это то, что вы искали.Если нет, поделитесь некоторыми примерами данных и желаемыми результатами.

0 голосов
/ 27 сентября 2018

Вам не нужно ничего объединять.

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

Это создаст столбец значений ИСТИНА / ЛОЖЬ.Этого должно быть достаточно для всего, что вы хотите сделать.Если вы должны иметь значения Да / Нет:

df1$flag <- ifelse(df1$account_number %in% df2$account_number_1, "Yes", "No")
0 голосов
/ 24 сентября 2018

Если вы хотите добавить флаг в первый набор данных, то вы можете сделать что-то вроде этого:

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)
...