У меня есть кусок. Мне нужно добавить новый столбец, в котором каждое значение является функцией соответствующих значений в нескольких других столбцах. Вот пример:
library(tibble)
tmp <- tribble(
~ID, ~x1, ~x2,
1, "200", NA,
2, "300", "400")
Я хочу добавить новый столбец new
, то есть TRUE
тогда и только тогда, когда любое из соответствующих значений в x1
и x2
начинается с "3". То есть я хочу
# A tibble: 2 x 4
ID x1 x2 new
<dbl> <chr> <chr> <lgl>
1 1 200 <NA> NA
2 2 300 400 TRUE
В этом примере new
является функцией только x1
и x2
. Но таких столбцов «х» может быть много, и я не всегда смогу выписать их имена. Они всегда будут начинаться с «x», так что это одно из решений:
tmp %>%
mutate(
new = select(., starts_with("x")) %>%
apply(., 1, function (x) any(substr(x, 1, 1)=="3"))
)
Но это решение довольно неуклюже. Есть ли более элегантный способ?
Здесь много связанных вопросов, но они обычно говорят о случаях, в которых (a) имена всех столбцов в исходном наборе данных известны и могут быть записаны, или (b) переменная new
является функцией всех других столбцов в кадре данных. ( Здесь является одним примером.)