2017-01-01 5 views
0

У меня есть два dataframes:значение картографирования Условно из кадра данных одного к другому R

> SubObj 

sNumber runningTrialNo wordTar  SubObj_ind 

1  34    nerd   3 
1  32    hooligan  1 
1  7    villager  3 
2  32    oak   2 
2  8    deer   2 
3  8    mammal  3 

> df 

sNumber runningTrialNo wordTar 

1  34    nerd 
1  34    nerd 
1  34    nerd 
1  32    hooligan 
1  32    hooligan 
1  7    villager 
2  32    oak 
2  32    oak 
2  8    deer 
3  8    mammal 
3  8    mammal 

Я хочу для отображения значений из SubObj $ SubObj_ind в ф.р. $ SubObj, поэтому все значения будут находиться в соответствии с sNumber (номер темы) и runningTrialNo (пробный номер). Это должно выглядеть примерно так л:

> df 

sNumber runningTrialNo wordTar SubObj_ind 

1  34    nerd  3 
1  34    nerd  3 
1  34    nerd  3 
1  32    hooligan 1 
1  32    hooligan 1 
1  7    villager 3 
2  32    oak  2 
2  32    oak  2 
2  8    deer  2 
3  8    mammal  3 
3  8    mammal  3 

Я написал код, который гипотетический должен делать работу, но он не отображает более пробы и предмет номера:

df$SubObj_indO <- array(0, nrow(df)) 
for(i in 1:nrow(SubObj)) { 
    index <- df$runningTrialNo == SubObj[i,"runningTrialNo"] & 
     df$sNumber == SubObj[i,"sNumber"] 
    df$SubObj_ind[index] <- SubObj[index, "SubObj_ind"] 
} 

Что плохое в этом мире код?

+0

сделать простое слияние с помощью 'слияния()' –

+0

ДФА dataframe имеет гораздо больше столбцов, чем SubObj dataframe. также порядок всех сырых разных в обоих кадрах данных – MariKo

ответ

0

Мы можем использовать match

df$SubObj_ind <- with(df, SubObj$SubObj_ind[match(wordTar, SubObj$wordTar)]) 
df 
#  sNumber runningTrialNo wordTar SubObj_ind 
#1  1    34  nerd   3 
#2  1    34  nerd   3 
#3  1    34  nerd   3 
#4  1    32 hooligan   1 
#5  1    32 hooligan   1 
#6  1    7 villager   3 
#7  2    32  oak   2 
#8  2    32  oak   2 
#9  2    8  deer   2 
#10  3    8 mammal   3 
#11  3    8 mammal   3 

Или используйте data.table

library(data.table) 
setDT(df)[SubObj[c("wordTar", "SubObj_ind")], on = "wordTar"] 
+0

спасибо! однако на моих более крупных кадрах данных он точно не отображается во всех тестах и ​​предметах – MariKo

+0

@MariKo Попробуйте с 'data.table' (обновлено мое сообщение) – akrun

+0

Я получаю сообщение об ошибке и затем устанавливаю' allow.cartesian = TRUE', чтобы избежать этого ошибка. однако новый dataframe состоит из многих других строк ... – MariKo