Прошу прощения, поскольку это, кажется, основной вопрос, но я искал лучшее решение, но не нашел его. У меня есть данные следующего типа.Выбор двух соответствующих столбцов в каждой строке кадра данных
myDATA<-data.frame(rbind(c("red","blue","green", "dog","hat","cat")
,c("blue","green", "blue","dog","hat","cat")
,c("green","blue","blue","dog","hat","cat")
,c("green","red", "blue","dog","hat","cat")
)
)
names(myDATA)<-c(paste("Color",1:3,sep=""),paste("Stim",1:3,sep=""))
myDATA$greenImage<-NA
Что дает:
MyData
+-----------------------------------------------------+
| Color1 Color2 Color3 Stim1 Stim2 Stim3 greenImage |
+-----------------------------------------------------+
| 1 red blue green dog hat cat NA |
| 2 blue green blue dog hat cat NA |
| 3 green blue blue dog hat cat NA |
| 4 green red blue dog hat cat NA |
+-----------------------------------------------------+
В Color
столбцы соответствуют Stim
столбцов по числу, например, Stim1
отображается в Color1
и так далее. Для каждой строки один Stim
отображается зеленым цветом. Я хочу найти это Stim
и сохранить в новом столбце под названием greenImage
.
Я собираюсь из ряда должностей, что apply()
может быть полезен здесь, но я не смог заставить его работать. Мое довольно безвкусное решение было петлей ниже формы,
for (i in 1:nrow(myDATA)) {
x <- match("green", unlist(myDATA[i,paste("Color", 1:3, sep="")]))
myDATA[i,"greenImage"] <- as.character(myDATA[i, paste("Stim", x, sep="")])
}
Результирующее в:
myDATA
+-----------------------------------------------------+
| Color1 Color2 Color3 Stim1 Stim2 Stim3 greenImage |
+-----------------------------------------------------+
| 1 red blue green dog hat cat cat |
| 2 blue green blue dog hat cat hat |
| 3 green blue blue dog hat cat dog |
| 4 green red blue dog hat cat dog |
+-----------------------------------------------------+
Однако фактический набор данных имеют более чем 10000 строк, так что мое решение очень неэффективно. Может ли кто-нибудь предложить альтернативный подход, который более эффективен?
Заранее благодарен!
Большое спасибо за быстрый ответ. Это было прямо и эффективно. Очень признателен. –