Заменить тире с нуля, не затрагивая отрицательные числа - PullRequest
0 голосов
/ 21 октября 2018

Есть ли способ заменить тире на NA или ноль, не влияя на отрицательные значения в векторе, похожем на следующее: c("-","-121512","123","-").

Ответы [ 2 ]

0 голосов
/ 21 октября 2018

Мы можем использовать na_if

library(dplyr)
na_if(v1, "-") %>% 
    as.numeric
 #[1]      NA -121512     123      NA

Если это data.frame

library(tidyverse)
df1 %>%
   mutate_all(na_if, "-") %>% 
   type_convert

данные

v1 <- c("-","-121512","123","-")
0 голосов
/ 21 октября 2018

Просто сделайте

x <- c("-","-121512","123","-")
x[x == "-"] <- NA
x
#[1] NA        "-121512" "123"     NA

Если вам нужен числовой вектор вместо переноса символов x в as.numeric().


Если вы хотите заменить все "-"в кадре данных мы можем использовать ту же логику

df1 <- data.frame(x = c("-","-121512","123","-"),
                  y = c("-","-121512","123","-"),
                  z = c("-","A","B","-"), stringsAsFactors = FALSE)

df1[df1 == "-"] <- NA

Если вам нужны числовые столбцы, если это уместно, тогда вы type.convert

df1[] <- lapply(df1, type.convert, as.is = TRUE)
str(df1)
'data.frame':   4 obs. of  3 variables:
 $ x: int  NA -121512 123 NA
 $ y: int  NA -121512 123 NA
 $ z: chr  NA "A" "B" NA
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...