2015-04-09 3 views
0

У меня есть два кадра данных "тест" и "Темп", который выглядит следующим образом:R - Возвращаемое значение х после сравнения значений у с г

тест:

Persnr Date AmountHolidays 
1 55312 201101   0.0 
2 55316 201101   3.0 
3 55325 201101   0.0 
4 76065 201101   0.0 
5 71928 201101   1.0 
6 72558 201101   0.5 

TEMP:

 Date Temp 
1 201101 4.8 
2 201102 0.3 
3 201103 8.5 
4 201104 8.6 
5 201105 14.8 
6 201106 15.5 
7 201107 17.5 
8 201108 19.0 
9 201109 13.9 
10 201110 10.5 

То, что я хотел бы иметь, это сравнить оба срока с обоих кадров данных и принять соответствующее значение Temp (из фрейма временных данных), чтобы я мог сохранить его в новый столбец «test». Это должен быть конечный результат:

Persnr Date AmountHolidays Temperature 
1 55312 201101   0.0 4.8 
2 55316 201101   3.0 4.8 
3 55325 201101   0.0 4.8 
4 76065 201101   0.0 4.8 
5 71928 201101   1.0 4.8 
6 72558 201101   0.5 4.8 
    .... 
10 43532 201201   3.0 0.3 
11 45324 201201   1.5 0.3 

Надеюсь, мой вопрос достаточно ясен. Я думаю, что должен быть оператор сравнения и выбрать вторую строку «временного» кадра данных. Но я не уверен, как создать такое утверждение.

Вот структура моих данных:

> str(test) 
'data.frame': 490 obs. of 5 variables: 
$ Persnr  : num 55312 55316 55325 76065 71928 ... 
$ Date   : num 201101 201101 201101 201101 201101 ... 
$ AmountHolidays: num 0 3 0 0 1 0.5 0 0.5 2 0 ... 

> str(temp) 
    'data.frame': 60 obs. of 2 variables: 
    $ Date: int 201101 201102 201103 201104 201105 201106 201107 201108 201109 201110 ... 
    $ Temp: num 4.8 0.3 8.5 8.6 14.8 15.5 17.5 19 13.9 10.5 ... 
+1

пожалуйста, используйте 'dput' на ваших data.frames' 'test' и temp' значения склейки, как это не дружит вообще для людей, отвечающих;) –

+0

Shall ли я будущее. Большое спасибо – minhphongb

ответ

2

базы R вы можете использовать merge:

merge(test, temp, by='Date', all.x=T) 

Или используя data.table пакет:

library(data.table) 

setkey(setDT(test), Date)[setDT(temp)] 
+0

, возможно, добавьте all.x = TRUE, чтобы не потерять данные в тесте, которые не совпадают .. поэтому сделайте это merge (test, temp, by = 'Date', all.x = T) – jeborsel

+0

Wow, I'm глупый. – minhphongb

0

Вы можете также использовать left_join() из dplyr

library(dplyr) 
left_join(test, temp) 

#Joining by: "Date" 
# Persnr Date AmountHolidays Temp 
#1 55312 201101   0.0 4.8 
#2 55316 201101   3.0 4.8 
#3 55325 201101   0.0 4.8 
#4 76065 201101   0.0 4.8 
#5 71928 201101   1.0 4.8 
#6 72558 201101   0.5 4.8 
Смежные вопросы