首页 > 解决方案 > R中的快速循环和调节;根据另一列在列中插入新值

问题描述

我有大量数据,我想遍历数据并将结果插入到我命名的新列中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 库)

标签: rloopsconditional-statements

解决方案


我认为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

(为了让它按原样工作,我将你的电流转换actioncharacter一个因素。由于你的数据只是玩具/样本,它可能不是你真实数据的因素。)


推荐阅读