R - заменить значения в нескольких полях, когда выполняются условия - PullRequest
0 голосов
/ 12 июня 2019

У меня есть фрейм данных, как показано ниже:

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

Моя цель состоит в том, чтобы заменить все значения в field2 на A и field3 на B, когда field1 = 'x'.Я написал две строки, чтобы сделать это, и хочу посмотреть, есть ли способ сделать это в одной строке.

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

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

Спасибо!

Ответы [ 3 ]

1 голос
/ 12 июня 2019

Использование dplyr:

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

Не одна строка, но чисто.

1 голос
/ 12 июня 2019

база

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")]
0 голосов
/ 12 июня 2019

Вы можете использовать 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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...