R:选择并更改数据框中列内的值
我想我需要写一个if/else循环来完成这个任务,但是我不确定从哪里开始。我想在数据框的一列中搜索具有特定长度且包含特定符号的值。例如,在列层中,如果值有两个符号长,并且包含一个L,则可能是LF、FL、LH或HL,我想将其他列值乘以0.5R:选择并更改数据框中列内的值,r,mapping,digital,soil,R,Mapping,Digital,Soil,我想我需要写一个if/else循环来完成这个任务,但是我不确定从哪里开始。我想在数据框的一列中搜索具有特定长度且包含特定符号的值。例如,在列层中,如果值有两个符号长,并且包含一个L,则可能是LF、FL、LH或HL,我想将其他列值乘以0.5 LAYER VALUE UPPER LOWER THICKNESS_MIN THICKNESS_MAX A1 A2 A3 LF 5 0 4 3
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
我的句子格式是,如果层中的值是2个字符,其中一个是L,那么将列值、上、下、厚度_最小值和厚度_最大值乘以1/2,并将该行的层值更改为FF_FH
我也需要这样做,但是对于层值为3个字符长的行,其他变量乘以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
首先,让我们将数据集放在一个可以复制并粘贴到R会话的表单中 如果感兴趣的列中的字符数是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
inx <- grepl("L", mydf$LAYER) & nchar(mydf$LAYER) == 2
mydf[inx, 2:5] <- mydf[inx, 2:5] * 1/2
mydf[inx, 1] <- "FF_FH"
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