这不是主要问题,但是让我很烦。
在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"
我收到警告消息: “较长的物体长度不是较短的物体长度的倍数”
有没有一种显而易见的方法,而不必一遍又一遍地重复同一行?
一如既往地感谢您的帮助
答案 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"))