R

时间:2017-04-29 20:36:37

标签: r

我一直在寻找对代码的写入调整,但找不到。这可能是一个简单的修复,但我找不到它。所以,我想请求指导。

我的样本数据集如下:

   Sample 
      .     
  <25.0      
    0.6      
   2.22     
   2.23     
   2.45     
   2.65     
      .     
      .     
   17000    
   10000    
    6000    
    4000  
    2000  
    1000  
     750  

我想将大于25的数字更改为除以1000的数字并忽略任何非数字(基本上忽略“&lt; 25.0”和“。”)并转换回“。”,因此以下结果:

  Sample 
      .     
      .      
    0.6      
   2.22     
   2.23     
   2.45     
   2.65     
      .     
      .     
      17    
      10     
       6    
       4  
       2  
       1  
     0.75  

到目前为止,我的代码如下:

sk$sample_1 <- sk$Sample

sk$sample_1 <- as.numeric(as.character(sk$sample_1))


#sk$sample_1[which(sk$sample_1 > 25 & !is.na(sk$sample_1)] = sk$sample_1/1000
sk$sample_1[sk$sample_1 > 25 & !is.na(sk$sample_1)] <- sk$sample_1/1000


#changing back to "."
sk$sample_1[is.na(sk$sample_1)] <- "."

但是,我获得了以下输出:

    Sample sample_1
1          .        .
2      <25.0        .
3        0.6      0.6
4       2.22     2.22
5       2.23     2.23
6       2.45     2.45
7       2.65     2.65
8          .        .
9          .        .
10     17000        .
11     10000        .
12      6000    6e-04
13      4000  0.00222
14      2000  0.00223
15      1000  0.00245
16       750  0.00265

我确定我错误地编写了最后一部分,但我无法找到它的修复程序。任何帮助深表感谢!!

谢谢!

1 个答案:

答案 0 :(得分:0)

您也可以通过调用sapply中的一些if / else操作来执行此操作:

sk$Sample_1 <- sapply(sk$Sample, function(x) {

    y <- as.numeric(x)

    if (is.na(y)) {

        NA

    } else if (y > 25) {

        y / 1000

    } else {

        y

    }

})

如果您确实希望NAs为.,则可以使用NA替换该代码中的"."。请记住,如果你这样做,整个矢量将是字符串而不是数字。