2017-07-14 4 views
0

間隔が深いデータセットがあります。間隔が注釈付けされたRのデータを再コードする

Depth 

0-3 

3-6 

6-9 

9-10 

10-11 

etc 

最初の3つは3単位ずつ、また最後の5(60-63, 63-66, 66-69, 69-72, 72-75)です。

この表記法のために、私は自分の理想的な変数で深さをプロットできません。深度間隔を含む列を高い値に再コード化したいと思います。つまり0-3の場合は3となります。

3単位の増分と単数増分でこれを行うには、

私は

df$depth <- 1:nrow(wor) 

を試してみましたが、これは私だけのシーケンシャル数値を与えます。私は

df$depth <- dplyr::recode(df$depth, "1=3; 2=6; 3=9; 4:54 = 9:60; 55=63; 56=66; 57=69; 58=72; 59=75; 60=78") __________________ 
but I get the error -------- Warning message: 
Unreplaced values treated as NA as .x is not compatible. Please specify replacements exhaustively or supply .default 

をしようとすると、

と任意の助けいただければ幸いです。マイクをタック! (スウェーデンの)。

+2

'マックス(as.numericにダッシュで数字を分割非公開になりstrsplit( "0-3"、 " - ") )))) ' –

答えて

1

あなたは次に2つの変数(列)を持っている

library(tidyr) 
tidyr::separate(data, col_name, into = c("first_num", "second_num"), sep = "-") 

tidyrパッケージから別の関数を使用することができますインターバルの各番号を指定して操作を計算することができます。

library(dplyr) 
df %>% 
    tidyr::separate(depth_var, into = c("first_num", "second_num"), sep = "-") %>% 
    mutate(first_num = as.double(first_num), 
      second_num = as.double(second_num), 
      intervals = abs(first_num - second_num))) 
2

正規表現を使用して、これらの文字列の最後の数字を抽出してみてください。

あなたがこの問題を解決しようとする正規表現を使用することができ
sub("^[[:digit:]]{1,}-([[:digit:]]{1,})", "\\1", "0-3") 
[1] "3" 
sub("^[[:digit:]]{1,}-([[:digit:]]{1,})", "\\1", "10-11") 
[1] "11" 

df$depth <- as.numeric(sub("^[[:digit:]]{1,}-([[:digit:]]{1,})", "\\1", df$depth)) 
1

dd <- data.frame(depth=c("0-3", "3-6", "6-9", "9-10", "10-11"), stringsAsFactors=FALSE) 
dd$max_depth <- gsub("([0-9]+)-([0-9]+)", "\\2", dd$depth) 
0

私はtidyrパッケージを使用して、((中央

set.seed(1) 
df <- data.frame(Depth = c("0-3", "3-6", "6-9", "9-12"), 
       val = sample(x=4, replace = F)) 
library(tidyr) 
df %>% 
    separate(Depth, c("start", "finish_dep"), sep = "-") %>% 
    select(-start) 
関連する問題