2017-08-30 30 views
1

私のデータセットに新しい列を作成したい:i)単語自体が "vi"で始まる場合、最後の1文字を削除する。 ii)単語自体が "vi"で始まらない場合は、最後の2文字を削除します。 条件付き突然変異体by dplyr

iris$Species <- as.character(iris$Species) 
iris$Species_mod <- substr(iris$Species, 
          1, 
          ifelse(grepl('^vi',iris$Species), 
            nchar(iris$Species)-1, 
            nchar(iris$Species)-2)) 

しかし、私はdplyrに mutateif_elsematchesを解読に苦労を持っている:私は以下のように、Rでその上で動作する方法を知っています。誰も私を啓発することはできますか?ありがとう!

+0

あなたは 'tidyverse''からcase_when'を試してみましたか? – Aramis7d

答えて

0

同じ考え、あなたが明示的に文字列

iris = mutate(iris, Species_mod = substr(Species, 1, nchar(as.character(Species)) - 
    ifelse(grepl('^vi', Species), 1, 2))) 
+0

エラー:mutate_impl(.data、dots)のエラー: 評価エラー: 'nchar()に文字ベクトルが必要です。' – lokheart

+0

私の謝罪:私はそれに応じて私の答えを編集しました。 – lebelinoz

0

にあなたの係数を変換する必要がある以外、あなたが何か試すことができます。

iris %>% 
    mutate(Species = as.character(Species)) %>% 
    rowwise() %>% 
    mutate(species2 = case_when(
    Species == 'vi%' ~ substr(Species, 0, nchar(Species) - 1), 
    Species != 'vi%' ~ substr(Species, 0, nchar(Species) - 2) 
)) 
関連する問題