【发布时间】:2020-04-24 10:36:42
【问题描述】:
我想将这 3 个以 5 开头的字符数字替换为 1。我尝试使用 sub if 条件,但它失败了
DO_concatenated:
DTNASC AGE
1 3031997 520
2 9022017 0
3 13071933 83
4 6022002 515
5 2061966 50
6 28121946 70
7 4121955 61
8 3101943 73
9 6022017 20
10 14012017 0
11 20071931 8
if((nchar(DO_concatenated$AGE) == 3)&(funcaoidade(DO_concatenated$AGE) == 5)){
DO_concatenated$IDADE = sub(pattern = 5, replacement = 1, DO_concatenated$AGE)
}
如果它有效,输出将是这样的:
DTNASC AGE
1 3031997 120
2 9022017 0
3 13071933 83
4 6022002 115
5 2061966 50
6 28121946 70
7 4121955 61
8 3101943 73
9 6022017 20
10 14012017 0
11 20071931 8
我之前这样做是为了删除以 4 开头的变量,代码如下:
if((nchar(DO_concatenated$IDADE) == 3)&(funcaoidade(DO_concatenated$IDADE) == 4)){
DO_concatenated$IDADE = sub(pattern = 4, replacement = "", DO_concatenated$IDADE)
}
它成功了!
"funcaoidade" 查找数字的第一个字符
funcaoidade = function(x){
substr(x, start = 1, stop = 1)
}
那么,有什么区别? 提前致谢!
【问题讨论】:
-
请按照您之前发布的解决方案
i1 <- (nchar(DO_concatenated$AGE) == 3)&(funcaoidade(DO_concatenated$AGE) == 5); DO_concatenated$IDADE[i1] = sub(pattern = 5, replacement = 1, DO_concatenated$AGE[i1])的方式使用它 -
谢谢,但您知道如何解释为什么第一个解决方案有效,然后不再有效吗?它与变量类有关吗?
-
if/else的输出是单个 TRUE/FALSE,它期望作为输入单个 TRUE/FALSE。如果该输出值为单个 TRUE,则它将在整个列上执行sub,如果为 FALSE,则不会 -
(nchar(DO_concatenated$AGE) == 3)&(funcaoidade(DO_concatenated$AGE) == 5) [1] TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE现在,第一个值是TRUE,当您执行if/else时,它需要第一个if((nchar(DO_concatenated$AGE) == 3)&(funcaoidade(DO_concatenated$AGE) == 5)) print("hello") [1] "hello" -
好的,我去看看!谢谢!
标签: r if-statement replace conditional-statements