Заполните столбец на основе нескольких условий с приоритетами этих условий - PullRequest
1 голос
/ 11 июня 2019

У меня есть такой набор данных:

Age <- rnorm(n=100, mean=20, sd=5)
ind <- which(Age %in% sample(Age, 50))
Age[ind]<-NA

Age2 <- rnorm(n=100, mean=20, sd=5)
ing <- which(Age2 %in% sample(Age2, 50))
Age2[ing]<-NA

Age3 <- rnorm(n=100, mean=20, sd=5)
int <- which(Age3 %in% sample(Age3, 50))
Age3[int]<-NA


data<-data.frame(Age,Age2,Age3)

Это старый набор данных, составленный несколькими разными людьми, где несколько столбцов означают одно и то же (в реальном наборе данных есть несколько столбцов для возраста),Как видите, есть довольно много АН.Я хотел бы создать единую колонку "возраст".Чтобы сделать это, я хотел бы в идеале использовать число из первого столбца возраста, но если это NA, я бы предпочтительно использовал число из Age2, а если это также NA, я бы использовал Age3, и я 'Я хотел бы сделать это в таком порядке (Age3 никогда не заменит Age2 и т. д.), поскольку я доверяю людям, которые вводят данные в таком порядке, ха-ха.

Мне известны другие ответы здесь длязаполнение столбцов на основе нескольких условий, например: dplyr, заменяющий значения n в столбце на основе нескольких условий Но я не уверен, как расставлять приоритеты.Спасибо!

Ответы [ 2 ]

3 голосов
/ 11 июня 2019

Вы можете использовать coalesce() из dplyr, который будет заполняться на основе первого непропущенного значения слева направо.

library(dplyr)

df <-data.frame(Age,Age2,Age3)
df$new_age <- coalesce(!!!df)

head(df)

       Age     Age2     Age3  new_age
1 17.19762       NA       NA 17.19762
2 18.84911 21.17693       NA 18.84911
3 27.79354       NA       NA 27.79354
4       NA 15.19072       NA 15.19072
5       NA       NA 27.99254 27.99254
6 28.57532       NA 19.55717 28.57532
1 голос
/ 11 июня 2019

A base R возможность может быть:

apply(data, 1, function(x) x[which(!is.na(x))[1]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...