быстрое зацикливание и кондиционирование в R; вставить новое значение в столбец на основе другого столбца - PullRequest
0 голосов
/ 27 марта 2020

У меня есть массивные данные, и я хочу l oop поверх данных и вставить результат в новый столбец, который я назвал его action2:

Мое состояние основано на столбце action:

if it contains "AA" OR "A1" then insert "As":
if it contains "BB" insert "Bs"
if it contains "AA" AND "C" then insert "AsC"
else insert the value in 'action' column 


df<- read.table(text="
user     action
1         AA
1         BB
1         ABCFF
1         A1B
2         AAB
2         BA1
2         AABC
3         M",header=T)

result df
user     action      action2
1         AA          As
1         BB          Bs
1         ABCFF       ABCFF
1         A1B         As
2         AAB         As    
2         BA1         As          
2         AABC        AsC
2         M           M

как я могу сделать это в R? (предпочтительно с использованием библиотеки dplyr)

1 Ответ

2 голосов
/ 27 марта 2020

Я думаю, что case_when будет работать, хотя, как прокомментировал @akrun, решение data.table может быть быстрее, если вам нужна скорость.

df %>%
  mutate(action2 = case_when(
    grepl("AA.*C|C.*AA", action) ~ "AsC",
    grepl("A[A1]", action)       ~ "As",
    grepl("BB", action)          ~ "Bs",
    TRUE                         ~ action)
  )
#   user action action2
# 1    1     AA      As
# 2    1     BB      Bs
# 3    1  ABCFF   ABCFF
# 4    1    A1B      As
# 5    2    AAB      As
# 6    2    BA1      As
# 7    2   AABC     AsC
# 8    3      M       M

(для того, чтобы это работало как есть Я преобразовал ваше текущее значение action в character из фактора. Поскольку ваши данные являются просто игрушкой / образцом, это может не быть фактором для ваших реальных данных.)

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