Страница 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"))