1

meltいくつかのワイド形式のデータで使用した後、R に次のデータ フレームがあります。

Condition value
C1SSC     4.5
C2SSC     7.7
TC1SSC    6.0
TC2SSC    7.3
PC1SSC    4.5
PC2SSC    5.7

各文字または部分文字列には特定の意味があります (たとえば、TC2SSC は、テクスチャ [T] 円 [C] を両目で見た状態 [2] を意味し、応答の「開始形状」は円 [SSC] でした)。

私がやりたいことは、これらの文字と部分文字列に依存する新しい変数列を生成することです.1つはテクスチャ用、もう1つは形状用などです。greplorを使用することを考えましsubstrたが、これらが文字列の特定の部分を評価できるかどうかはわかりません (つまり、形状を確認するとき、最初の 2 文字に「C」が含まれているかどうかを確認します)。

理想的には、これが最終的な結果です (TC2SSC の例):

Texture    Shape    View    startShape    value
T          Circle   2       Circle        4.5

便利な機能がたくさんありますが、ここでどれを使うのが最適かわかりません。アドバイスをいただければ幸いです。

4

1 に答える 1

2

ここでは、問題にアプローチする簡単な方法を示します。基本的に、パターンを使用して、gsub「分割」したいすべての文字 (ここでは「_」) の後に文字を挿入してから使用strsplitします。方法は次のとおりです。

split.df <- data.frame(do.call(rbind, strsplit(gsub("(C|SSC|[0-9]+)", "_\\1_", 
                      dt$Condition), "[_]+")), stringsAsFactors=FALSE)

#   X1 X2 X3  X4
# 1     C  1 SSC
# 2     C  2 SSC
# 3  T  C  1 SSC
# 4  T  C  2 SSC
# 5  P  C  1 SSC
# 6  P  C  2 SSC

さて、残りはかなり簡単です(名前を変更し、クラスを変換し、Cを円に置き換えます..)

names(split.df) <- c("Texture", "Shape", "View", "startShape")
split.df <- within(split.df, { Shape[Shape == "C"] <- "Circle" 
            View <- as.numeric(View)
            startShape[startShape == "SSC"] <- "Circle"} )
cbind(split.df, value = df$value)

#   Texture  Shape View startShape df$value
# 1         Circle    1     Circle      4.5
# 2         Circle    2     Circle      7.7
# 3       T Circle    1     Circle      6.0
# 4       T Circle    2     Circle      7.3
# 5       P Circle    1     Circle      4.5
# 6       P Circle    2     Circle      5.7
于 2013-04-10T15:28:52.267 に答える