2016-04-18 3 views
0

У меня есть два кадра данных. Один из них - это шаблон, который включает все строки, которые мне нужны. Мне нужны все комбинации спорта и модели. Другой - это результат, который я получаю, который включает в себя некоторые посторонние строки и отсутствует другие. Как объединить их так, чтобы выходной фреймворк содержал все соответствующие строки (отбрасывает ненужные строки на выходе и берет другие необходимые строки из шаблона). Я хотел бы, чтобы на последнем кадре данных было среднее и количество из результата, кроме тех строк, которые не существовали, в этом случае они должны быть NA.R сравнение, слияние, соответствие данных кадров

Шаблон

  date gender licen checked sport model average amount 
1 3/21/16  Man CERT  1 baseball model1  NA  NA 
2 3/21/16  Man CERT  1 soccer model1  NA  NA 
3 3/21/16  Man CERT  1 football model1  NA  NA 
4 3/21/16 Woman CERT  1 baseball model2  NA  NA 
5 3/21/16  Man CERT  1 soccer model2  NA  NA 
6 3/21/16  Man CERT  1 football model2  NA  NA 
7 3/21/16 Woman NO  1 baseball model3  NA  NA 
8 3/21/16 Unknown NO  1 soccer model3  NA  NA 
9 3/21/16 Unknown NO  1 football model3  NA  NA 
10 3/21/16 Woman NO  1 baseball model4  NA  NA 
11 3/21/16 Woman NO  1 soccer model4  NA  NA 
12 3/21/16 Woman NO  1 football model4  NA  NA 

Выход:

 date gender licen checked sport model average amount 
1 3/21/16  Man CERT  1 baseball model1  1.2  12 
2 3/21/16  Man CERT  1 soccer model1  4.1  56 
3 3/21/16 Woman CERT  1 walking model2  6.5  33 
4 3/21/16  Man CERT  1 soccer model2  2.4  91 
5 3/21/16  Man CERT  1 football model2  1.1  14 
6 3/21/16 Woman NO  1 baseball model3  3.7  56 
7 3/21/16 Unknown NO  1 running model3  6.1  29 
8 3/21/16 Unknown NO  1 football model3  1.0  17 
9 3/21/16 Woman NO  1 baseball model4  1.6  56 
10 3/21/16 Woman NO  1 football model4  2.7  32 

Спасибо за вашу помощь!

ответ

2

Копировать вставили данные в read.table функции:

a <- read.table("clipboard", header = T) #Template 
b <- read.table("clipboard", header = T) #Output 

Вы можете использовать функцию merge, но вам нужен уникальный идентификатор. Постройте один с interaction. Paste будет работать здесь.

a$id <- interaction(a$sport, a$model) 
b$id <- interaction(b$sport, b$model) 

Объедините данные и добавьте все несоответствующие случаи в шаблон df.

merge(a, b, by="id", all.x = T) 
1

Это может работать, если комбинации спортивной модели уникальны в шаблоне:

# Drop NA answers 
NewData <- Template[, -which(names(Template %in% c("average", "amount")))] 

# merge on other data.frame 
newData <- merge(newData, Output, by=c("sport", "model"), all.x=T) 
Смежные вопросы