如果列表中的值替换字段值

时间:2019-02-15 07:55:15

标签: r dataframe

这不是主要问题,但是让我很烦。

在R中,我根据另一列的值更改一列中字段的值:

my_df[my_df$column1 == "ONE", 'column2'] <- "My text"
my_df[my_df$column1 == "TWO", 'column2'] <- "My text"

以此类推

如果我尝试通过添加以下内容缩短到一行:

my_df[my_df$column1 == c("ONE", "TWO"), 'column2'] <- "My text"

我收到警告消息: “较长的物体长度不是较短的物体长度的倍数”

有没有一种显而易见的方法,而不必一遍又一遍地重复同一行?

一如既往地感谢您的帮助

2 个答案:

答案 0 :(得分:1)

是的,有一种方法可以实现。

问题是“ ==”运算符。

您需要改用“ %in%”。

即您不想问第1列中的值是否等于c("ONE", "TWO"),而是想问第1列中的值是否在向量c("ONE", "TWO")中。

因此,您的示例:

my_df[my_df$column1 %in% c("ONE", "TWO"), 'column2'] <- "My text"

答案 1 :(得分:1)

dplyr解决方案(假设column2已经存在):

# sample df
my_df <- tibble(column1 = c("ONE", "TWO", "THREE"),
                column2 = c("a", "b", "c"))

# code
my_df %>% 
  mutate(column2 = replace(column1,
                           column1 %in% c("ONE", "TWO"), 
                           "My text"))