Есть ли объяснение этой ошибке функции R слияния()?

88
7

Я пытаюсь использовать функцию merge R для объединения двух data.frames, но продолжаю получать следующую ошибку:

Ошибка в fix.by(by.y, y): 'by' должен указывать уникально допустимый столбец

Я не уверен, что означает эта ошибка или как ее устранить.

Мой код до сих пор выглядит следующим образом:


movies <- read_csv("movies.csv")

firsts = vector(length = nrow(movies))
for (i in 1:nrow(movies)) {
firsts[i] = movies$director[i] %>% str_split(" ", n = 2) %>% unlist %>% .[1]
}

movies$firsts = firsts

movies <- movies[-c(137, 147, 211, 312, 428, 439, 481, 555, 602, 830, 850, 1045, 1080, 1082, 1085, 1096, 1255, 1258, 1286, 1293, 1318, 1382, 1441, 1456, 1494, 1509, 1703, 1719, 1735, 1944, 1968, 1974, 1977, 2098, 2197, 2409, 2516, 2546, 2722, 2751, 2988, 3191,
3227, 3270, 3283, 3285, 3286, 3292, 3413, 3423, 3470, 3480, 3511, 3676, 3698, 3826, 3915, 3923, 3954, 4165, 4381, 4385, 4390, 4397, 4573, 4711, 4729, 4774, 4813, 4967, 4974, 5018, 5056, 5258, 5331, 5405, 5450, 5469, 5481, 4573, 5708, 5715, 5786, 5886, 5888, 5933, 5934, 6052, 6091, 6201, 6234, 6236, 6511, 6544, 6551, 6562, 6803, 4052, 4121, 4326),]
movies <- movies[-c(4521,5846),]

g <- gender_df(movies, name_col = "firsts", year_col = "year", method = c("ssa"))

merge(movies, g, by = c("firsts", "name"), all = FALSE)

спросил(а) 2021-01-25T16:57:42+03:00 4 месяца, 4 недели назад
1
Решение
89

Я думаю, что вы пытаетесь дать с by аргумента, не действительное значения. Действительно, документация говорит:

По умолчанию кадры данных объединяются в столбцах с именами, которые у них обоих есть, но отдельные спецификации столбцов могут быть заданы by.x и by.y. Строки в двух фреймах данных, которые соответствуют указанным столбцам, извлекаются и объединяются. Если существует более одного совпадения, все возможные совпадения вносят по одной строке каждый. Точное значение слова "матч" см. В разделе "матч".

В вашем случае вы должны попробовать следующее:

merge(x = movies,y =  g, by.x = "firsts", by.y = "name", all = FALSE)

ответил(а) 2021-01-25T16:57:42+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема