簡體   English   中英

R中的數值條件替換

[英]Numerical Conditional replacement in R

我一直在尋找對我的代碼的寫調整,但找不到。 這可能是一個簡單的修復程序,但我找不到。 因此,我想尋求指導。

我的樣本數據集如下:

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

我想將大於25的數字更改為除以1000的數字,並忽略任何非數字的內容(基本上忽略“ <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

我確定我對最后一部分的編碼不正確,但是找不到解決方法。 任何幫助深表感謝!!

謝謝!!

您也可以在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

    }

})

如果您確實希望NA成為. ,您可以使用"."替換該代碼中的NA "." 請記住,如果這樣做,整個向量將是字符串而不是數字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM