R-满足条件时在多个字段中替换值

时间:2019-06-12 20:01:25

标签: r

我有一个如下数据框:

 field1  field2  field3
   x     1      2
   y     3      4
   x     na     na

我的目标是在field1 ='x'时将field2中的所有值替换为A,将field3中的所有值替换为B。我写了两行来做到这一点,并想看看是否有一种方法可以做到这一点。

df$field2[df$field1=='x'] <- 'A'

df$field3[df$field1=='x'] <- 'B'

谢谢!

3 个答案:

答案 0 :(得分:1)

基本

df <- data.frame(field1 = c("x", "y", "x"),
                 field2 = c(1, 3, NA),
                 field3 = c(2, 4, NA))

df[df$field1 == "x", c("field2", "field3")] <- list("A", "B")

data.table

library(data.table)
dt <- data.table(field1 = c("x", "y", "x"),
                 field2 = c(1, 3, NA_character_),
                 field3 = c(2, 4, NA_character_))

dt[field1 == "x", `:=`(field2 = "A", field3 = "B")]

答案 1 :(得分:1)

使用dplyr:

df %>% 
  mutate(field2 = case_when(field1 == "x" ~ "A", 
                            TRUE ~ field2),
         field3 = case_when(field1 == "x" ~ "B", 
                            TRUE ~ field3))

不是一行,而是干净的。

答案 2 :(得分:0)

您可以使用matrix进行替换。

df1[df1$field1 == "x", 2:3] <- t(matrix(c("A", "B"), 2, 2))
df1
#   field1 field2 field3
# 1      x      A      B
# 2      y      3      4
# 3      x      A      B

数据

df1 <- structure(list(field1 = c("x", "y", "x"), field2 = c("A", "3", 
"A"), field3 = c("B", "4", "B")), row.names = c(NA, -3L), class = "data.frame")