Создание двоичной переменной, обусловленной значениями в другой таблице в R - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь создать новую переменную флага (двоичную) для таблицы на основе значений в другой таблице. Я посмотрел вокруг stackoverflow, но не могу найти похожий вопрос. Например, у меня есть таблица A и таблица B, и у каждой из них есть переменная customer.

Таблица A:

A.customer
1
2
3
4
5

Таблица B:

B.customer
1
2
6

Я хочу создать новую переменную в A, называемую flag, где, если значение в customer также встречается в B, то flag = Y, иначе flag = N. Как это:

A.customer A.flag
1          Y
2          Y
3          N
4          N
5          N

Каким образом я могу присоединиться к таблицам и установить флаг новой переменной? Любая помощь приветствуется.

Ответы [ 3 ]

0 голосов
/ 31 октября 2018

Чтобы создать новый столбец, используйте %in% и factor.

A.flag <- TableA$A.customer %in% TableB$B.customer
TableA$A.flag <- factor(A.flag, labels = c("N", "Y"))

TableA
#  A.customer A.flag
#1          1      Y
#2          2      Y
#3          3      N
#4          4      N
#5          5      N

Данные.

TableA <-
structure(list(A.customer = 1:5, A.flag = structure(c(2L, 2L, 
1L, 1L, 1L), .Label = c("N", "Y"), class = "factor")), row.names = c(NA, 
-5L), class = "data.frame")

TableB <-
structure(list(B.customer = c(1L, 2L, 6L)), class = "data.frame", row.names = c(NA, 
-3L))
0 голосов
/ 01 ноября 2018

Используя tidyverse , вы можете использовать case_when следующим образом:

library(tidyverse)

table_a <- data_frame(A.customer = 1:5)
table_b <- data_frame(B.customer = c(1, 2, 6))

table_a
#> # A tibble: 5 x 1
#>   A.customer
#>        <int>
#> 1          1
#> 2          2
#> 3          3
#> 4          4
#> 5          5

table_b
#> # A tibble: 3 x 1
#>   B.customer
#>        <dbl>
#> 1          1
#> 2          2
#> 3          6

table_a %>%
  mutate(
    A.flag = case_when(
      A.customer %in% table_b$B.customer ~ "Y",
      TRUE ~ "N"
    )
  )
#> # A tibble: 5 x 2
#>   A.customer A.flag
#>        <int> <chr> 
#> 1          1 Y     
#> 2          2 Y     
#> 3          3 N     
#> 4          4 N     
#> 5          5 N

Создано в 2018-10-31 пакетом представ. (v0.2.1)

case_when действует как if / else if / else. Итак, вы говорите: «Если A.customer находится в table_b$B.customer, верните значение Y». Затем «во всех других случаях (иначе как TRUE всегда будет иметь значение ИСТИНА) верните N

0 голосов
/ 31 октября 2018

Используйте оператор %in%

A = 1:5
B = c(1,2,6)
> A %in% B
[1]  TRUE  TRUE FALSE FALSE FALSE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...