これは基本的な質問のようで申し訳ありませんが、より良い解決策を探していましたが、見つかりませんでした。次のタイプのデータがあります。
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
これにより、次のことが得られます。
マイデータ
+-----------------------------------------------------+
| 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
ます。行ごとに、1 つ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 行を超える行があるため、私のソリューションは非常に非効率的です。より効率的な代替アプローチを提案できる人はいますか?
前もって感謝します!