2017-07-20 4 views
0

これを達成するために何らかの種類のif/elseループを書く必要があると思いますが、どこから開始するのかはわかりません。私は特定の長さの値のために、私のデータフレームの列内を検索し、特定のシンボルが含まれています。たとえば、列LAYER内で、値が2シンボル長で、 "L"(LF、FL、LH、またはHL)の場合は、他の列の値に0.5を掛けたいとします。R:データフレームの列内の値を選択して変更する

LAYER VALUE UPPER LOWER THICKNESS_MIN THICKNESS_MAX A1 A2 A3 

LF  5  0  4   3     10   3.4 67 24 
LFH  9  0  6   2     9   3.7 65 76 
FH  4  0  2   1     8   3.3 35 34 
FL  11  0  1   5     6   3.8 56 86 
LH  50  0  4   3     4   4.6 43 45 

私はこれを持っている文の形式は、LAYER中の#if値が2つの文字で、そのうちの一つがLで、そして1/2列VALUE、UPPER、LOWER、THICKNESS_MINとTHICKNESS_MAXを掛け」で、

は私も同じことを行う必要があり、この行のためではなく、LAYER値が3文字の長さの行のFF_FHにLAYER値を変更し、他の変数は2/3を乗じて。

を私はしたいです最終的な結果は次のようなものになります

LAYER VALUE UPPER LOWER THICKNESS_MIN THICKNESS_MAX A1 A2 A3 

LF  2.5  0  2   1.5    5   3.4 67 24 
LFH  3  0  2   1.3    3   3.7 65 76 
FH  4  0  2   1     8   3.3 35 34 
FL  5.5  0  0.5   2.5    3   3.8 56 86 
LH  25  0  2   1.5    2   4.6 43 45 

答えて

1

まず、データセットをRセッションにコピーして貼り付けることのできる形式にしましょう。

mydf <- 
structure(list(LAYER = c("LF", "LFH", "FH", "FL", "LH"), VALUE = c(5L, 
9L, 4L, 11L, 50L), UPPER = c(0L, 0L, 0L, 0L, 0L), LOWER = c(4L, 
6L, 2L, 1L, 4L), THICKNESS_MIN = c(3L, 2L, 1L, 5L, 3L), THICKNESS_MAX = c(10L, 
9L, 8L, 6L, 4L), A1 = c(3.4, 3.7, 3.3, 3.8, 4.6), A2 = c(67L, 
65L, 35L, 56L, 43L), A3 = c(24L, 76L, 34L, 86L, 45L)), .Names = c("LAYER", 
"VALUE", "UPPER", "LOWER", "THICKNESS_MIN", "THICKNESS_MAX", 
"A1", "A2", "A3"), class = "data.frame", row.names = c(NA, -5L 
)) 

は今、それだけでncharの出力とgreplが論理ベクトルにその第二引数のサイズを返しますので、私たちがすることができますし、それ(&)ことを覚えて、非常に簡単です。

inx <- grepl("L", mydf$LAYER) & nchar(mydf$LAYER) == 2 
mydf[inx, 2:5] <- mydf[inx, 2:5] * 1/2 
mydf[inx, 1] <- "FF_FH" 

interessの列の文字数が3の場合は、それに応じてコードを調整してください。

inx <- nchar(mydf$LAYER) == 3 
mydf[inx, 2:5] <- mydf[inx, 2:5] * 2/3 

mydf 
    LAYER VALUE UPPER LOWER THICKNESS_MIN THICKNESS_MAX A1 A2 A3 
1 FF_FH 2.5  0 2.0  1.500000   10 3.4 67 24 
2 LFH 6.0  0 4.0  1.333333    9 3.7 65 76 
3 FH 4.0  0 2.0  1.000000    8 3.3 35 34 
4 FF_FH 5.5  0 0.5  2.500000    6 3.8 56 86 
5 FF_FH 25.0  0 2.0  1.500000    4 4.6 43 45 
関連する問題