2015-01-28 3 views
0

У меня есть образец данных с 45 строками и приведен ниже.Автоматизация поиска и преобразования значений в r

itemid     title release_date 
16 573   Body Snatchers   1993 
17 670   Body Snatchers   1993 
41 1645  Butcher Boy, The   1998 
42 1650  Butcher Boy, The   1998 
1  218    Cape Fear   1991 
18 673    Cape Fear   1962 
27 1234 Chairman of the Board   1998 
43 1654 Chairman of the Board   1998 
2  246    Chasing Amy   1997 
5  268    Chasing Amy   1997 
11 309    Deceiver   1997 
37 1606    Deceiver   1997 
28 1256 Designated Mourner, The   1997 
29 1257 Designated Mourner, The   1997 
12 329  Desperate Measures   1998 
13 348  Desperate Measures   1998 
9  304   Fly Away Home   1996 
15 500   Fly Away Home   1996 
26 1175    Hugo Pool   1997 
39 1617    Hugo Pool   1997 
31 1395  Hurricane Streets   1998 
38 1607  Hurricane Streets   1998 
10 305   Ice Storm, The   1997 
21 865   Ice Storm, The   1997 
4  266  Kull the Conqueror   1997 
19 680  Kull the Conqueror   1997 
22 876    Money Talks   1997 
24 881    Money Talks   1997 
35 1477    Nightwatch   1997 
40 1625    Nightwatch   1997 
6  274     Sabrina   1995 
14 486     Sabrina   1954 
33 1442  Scarlet Letter, The   1995 
36 1542  Scarlet Letter, The   1926 
3  251   Shall We Dance?   1996 
30 1286   Shall We Dance?   1937 
32 1429   Sliding Doors   1998 
45 1680   Sliding Doors   1998 
20 711 Substance of Fire, The   1996 
44 1658 Substance of Fire, The   1996 
23 878   That Darn Cat!   1997 
25 1003   That Darn Cat!   1997 
34 1444   That Darn Cat!   1965 
7  297    Ulee's Gold   1997 
8  303    Ulee's Gold   1997 

То, что я пытаюсь сделать, это преобразовать элемент в соответствии с именем фильма и если дата выпуска фильма такая же. например, в фильме «Ulee's Gold» есть два элемента id: 297 & 303. Я пытаюсь найти способ автоматизировать процесс проверки даты выпуска фильма, и если это то же самое, itemid [2] этого фильма должен быть заменен itemid [1]. В настоящее время я сделал это вручную, извлекая itemid на два вектора x & y и затем меняя их с помощью векторизации. Я хочу знать, есть ли лучший способ выполнить эту задачу, потому что есть только 18 фильмов с несколькими идентификаторами, но набор данных имеет несколько сотен. Поиск и обработка этого вручную потребует много времени.

Я предоставляю код, который я использовал для выполнения этой задачи.

x <- c(670,1650,1654,268,1606,1257,348,500,1617,1607,865,680,881,1625,1680,1658,1003,303) 
y<- c(573,1645,1234,246,309,1256,329,304,1175,1395,305,266,876,1477,1429,711,878,297) 


for(i in 1:18) 
{ 
    df$itemid[x[i]] <- y[i] 

} 

Есть ли лучший способ сделать это?

+0

Вы имеете в виду, что оба получили товар 297 в вашем примере? Если есть 3 с одним и тем же товаром, все ли они получают предмет первого наблюдения? – jalapic

+0

По этой причине требуется проверка на дату выпуска. Вы можете увидеть фильм «Это чертова кошка!» имеет 3 вхождения, но первые два являются релевантными. Да, я согласен, что оба должны получить 297, поскольку фильмы точно такие же, что можно подтвердить из release_date. Надеюсь, это ответит на вопрос. Нижняя часть двух предметов должна быть той, которую нужно использовать. – syebill

ответ

0

Я думаю, что вы можете сделать это в dplyr прямолинейно:

Используя свой комментарий выше, краткий пример:

itemid <- c(878,1003,1444,297,303) 
title <- c(rep("That Darn Cat!", 3), rep("Ulee's Gold", 2)) 
year <- c(1997,1997,1965,1997,1997) 

temp <- data.frame(itemid,title,year) 
temp 

library(dplyr) 

temp %>% group_by(title,year) %>% mutate(itemid1 = min(itemid)) 

(я изменил «RELEASE_DATE» на «год» по какой-то причине ... но это в основном группы название/год вместе, ищет минимальное Itemid и mutate создает новую переменную с этим низкий «Itemid»

, который дает:.

# itemid   title year itemid1 
#1 878 That Darn Cat! 1997  878 
#2 1003 That Darn Cat! 1997  878 
#3 1444 That Darn Cat! 1965 1444 
#4 297 Ulee's Gold 1997  297 
#5 303 Ulee's Gold 1997  297 
+0

Отлично! Это сработало. Спасибо @jalapic – syebill

Смежные вопросы