#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')
вставляется, чтобы указать, что «доход» и «ранг» являются перекрывающимися переменными (которые необходимы для выполнения объединения).