Страница 1 из 1
left_join из пакета dplyr
Добавлено: 30 апр 2020, 18:51
VistaSV30
Добрый день!
Как присвоить значения по условию
Код: Выделить всё
v1 <- c("cars", "cars1", "car", "car2")
v2 <- 1:4
vv <- data.frame(v1,v2)
v3 <- c("cars", "car")
v4 <- 10:11
vz <- data.frame(v3, v4)
Есть два data.frame - vv и vz
Надо vv$v2 присвоить значения vz$v4 по условию vv$v1 == vz$v3
Так не получается
vv$v2[vv$v1 == vz$v3] <- vz$v4[vv$v1 == vz$v3]
Подскажите, пожалуйста, как сделать?
Спасибо!
Re: Присвоить значения в фрэйме по условию
Добавлено: 01 май 2020, 08:16
nickleb
Здравствуйте.
М.б., дело в том, что при генерации Ваших data.frame'ов
не даёте опцию "stringsAsFactors = FALSE" ?
Попробуйте заменить строки кода создания data.frame'ов на:
Код: Выделить всё
vv <- data.frame(v1,v2, stringsAsFactors = FALSE)
vz <- data.frame(v3, v4, stringsAsFactors = FALSE)
и проверить получите ли, что хотели. - Сам я не проверял.
Re: Присвоить значения в фрэйме по условию
Добавлено: 01 май 2020, 10:38
gamm
VistaSV30 писал(а): ↑30 апр 2020, 18:51 vv$v1 == vz$v3
С точки зрения программы написана какая-то непонятная ерунда. Если нужно использовать vz как справочник для перекодировки значений в vv, то есть match(), merge() и прочие sqldf::sqldf().
Re: left_join из пакета dplyr
Добавлено: 14 май 2020, 10:50
VistaSV30
Проблема решена!
В пакете dplyr есть функция left_join() - работает как в SQL запрос на выборку с объединением
Код: Выделить всё
set.seed(1)
(A <- data.frame(a1=LETTERS[1:3], a2=sample(10:99,3), a3=sample(0:9,3), a4=sample(0:9,3)) )
B <- data.frame(b1=LETTERS[sample(1:3, 50,replace = T)], b2=sample(10:99,50))
library(dplyr)
left_join(B,A, by=c("b1"="a1")) # присоединяем все столбцы
left_join(B,select(A, a1,a2), by=c("b1"="a1")) # присоединяем один столбец
Присоединять можно и по двум ключам, синтаксис такой
left_join(B,A, by=c("b1"="a1","b2"="a2"))