Как объединить значения из другого набора данных со значением, содержащимся в первом наборе данных в R?

#r #statistics

#r #Статистика

Вопрос:

У меня есть следующие два набора данных:

Я хочу объединить два вышеуказанных набора данных следующим образом. Переменная income — это категориальная переменная, которая принимает значения от 0 до 16. Для каждого из этих значений столбец rank содержит ровно одно значение, равное этому значению из income . Я хочу присоединить значение дохода, которое находится в ранге, к нижнему и верхнему пределу из второго набора данных. Есть идеи о том, как это сделать? Я новичок в R.

Комментарии:

1. Вы ищете merge функцию, что-то вроде merge(df1,df2,all.x = T,by.x = "income",by.y = "rank")

2. Вы также можете взглянуть на различные формы соединения из пакета dplyr (например, внутреннее соединение, left_join, right_join и full_join).

3. Я пробовал merge(dflapopofficial,wagecmp,all.dflapopofficial = T,by.dflapopofficial = "income",by.wagecmp = "rank") . Это дает мне столбец только с нулями.

Ответ №1:

Функции объединения в dplyr могут объединять фреймы данных с помощью разных переменных, используя именованный вектор, например by = c('a' = 'b') . Таким образом, решение с использованием dplyr может выглядеть следующим образом.

 library(dplyr)

data1 <- tibble(income = c(0, 1, NA))

data2 <- tibble(rank = c(0, 1, 2),
                lowerLimit = c(0, 50, 150),
                upperLimit = c(50, 200, 175))

data1 %>%
  left_join(data2, by = c('income' = 'rank'))

#   income lowerLimit upperLimit
#    <dbl>      <dbl>      <dbl>
# 1      0          0         50
# 2      1         50        200
# 3     NA         NA         NA
  

Комментарии:

1. Конечно, @vahis100. Строка по существу означает левое соединение (см. dplyr.tidyverse.org/reference/join.html ). by = c('income' = 'rank') вставляется, чтобы указать, что «доход» и «ранг» являются перекрывающимися переменными (которые необходимы для выполнения объединения).