0

これは基本的な質問のようで申し訳ありませんが、より良い解決策を探していましたが、見つかりませんでした。次のタイプのデータがあります。

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 行を超える行があるため、私のソリューションは非常に非効率的です。より効率的な代替アプローチを提案できる人はいますか?

前もって感謝します!

4

1 に答える 1

1

ifelse比較をベクトル化するために使用するだけです。

for (i in 1:3) {
  myDATA$greenImage = ifelse (myDATA[,i] == "green",
                              as.character(myDATA[,i+3]),
                              myDATA$greenImage)
}

as.characterから文字列を取得する必要があることに注意してくださいfactorstringsAsFactors = FALSEを作成するときに使用すると、それを回避できますdata.frame

于 2013-04-25T18:14:52.670 に答える