我有一个如下数据框:
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'
谢谢!
答案 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")