Как игнорировать символы в утверждении в R? - PullRequest
0 голосов
/ 30 марта 2020

, поэтому в настоящее время у меня есть переменные a, b и c. У меня есть столбец 'v4', который является двоичной переменной, основанной на столбце 'v1'. 1 (a, b или c) 0 (не).

Пример:

v1 v2 v3 v4
a  b  c  1
b  b  c  1
d  b  c  0

У меня возникли проблемы с моими данными: иногда они имеют годы или другие символы до Значение. Например, у меня есть экземпляры «2020 c». Это было бы правильно, и я хотел бы зафиксировать это в столбце «v4». Однако, если эти годы наступят позже, это будет неправильно. Например, «c 2020» будет отображаться как 0 в столбце «v4».

Пример того, как я хочу, чтобы это выглядело:

v1     v2 v3 v4
a      b  c  1
b      b  c  1
d      b  c  0
c 2020 b  c  0
2020 c b  c  1
1990 c b  a  1

Как я мог сделать эту работу? В настоящее время я использую

df1 $ v4 <- as.integer (grepl ("(a | b | c) $", df1 $ v1)) </p>

Из этого кода я получаю этот результат, который будет неверным:

v1     v2 v3 v4
    a      b  c  1
    b      b  c  1
    d      b  c  0
    c 2020 b  c  1
    2020 c b  c  1
    1990 c b  a  1

это хорошо для захвата всех экземпляров, но я не могу исключить случаи, когда данные поступают после Переменная я пытаюсь захватить. Надеюсь, это имеет смысл.

Ответы [ 2 ]

0 голосов
/ 30 марта 2020

Это работает для теста OP. Это фактически метод, который использует OP, но, похоже, он дает правильные (и ожидаемые) результаты. Я публикую это в качестве ответа, чтобы позволить OP протестировать и выяснить, в чем заключается проблема.

x <- c("a", "b", "d", "c 2020", "2020 c", "1990 c", "a-xyzrandomstuff")
as.integer(grepl("(a|b|c)$", x))
#> [1] 1 1 0 0 1 1 0

Создано в 2020-03-30 пакетом prex (v0.3.0)

0 голосов
/ 30 марта 2020

df1 $ v4 <- as.integer (grepl ("(a | b | c)", df1 $ v1)) без $ может работать </p>

> yy <- c(letters[1:4], "2020 c", "c 2020", "d 2019", "2019 d")

> 

> as.integer(grepl("(a|b|c)", yy))

[1] 1 1 1 0 1 1 0 0

> as.integer(grepl("(a|b|c)$", yy))

[1] 1 1 1 0 1 0 0 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...