Создание переменной для уникального идентификатора на условии сгруппированных данных - PullRequest
1 голос
/ 10 ноября 2019

Добрый день всем!

Я столкнулся с небольшой проблемой создания новой переменной на основе сгруппированных данных для каждого уникального идентификатора.

Это мой набор данных:

ID = c("1", "1", "2", "2", "2", "3", "4")
CAL_YEAR = c("2010", "2011", "2010", "2011", "2011", "2012", "2013")
T_F = c("T", "F", "F", "T", "F", "F", "T")

DF_1 = data.frame(ID, CAL_YEAR, T_F)

Это должен быть мой окончательный вывод:

ID = c("1", "1", "2", "2", "2", "3", "4")
CAL_YEAR = c("2010", "2011", "2010", "2011", "2011", "2012", "2013")
T_F = c("T", "F", "F", "T", "F", "F", "T")
VAR_TF = c("T", "F", "F", "T + F", "T + F", "F", "T")

DF_2 = data.frame(ID, CAL_YEAR, T_F, VAR_TF)

Я ищу элегантный метод для:

Для каждого уникального идентификатора, по CAL_YEAR: ЕСЛИ T_F = "T" или "F", ТОГДА VAR_TF = "T" или "F"

Моя задача - использовать уникальный идентификатор "2", CAL_YEAR "2011 ", где T_F содержит" T "и" F ". Для этого случая я бы хотел, чтобы VAR_TF = "T + F" для каждого "T" и "F".

1 Ответ

0 голосов
/ 10 ноября 2019

Мы можем использовать ave, проверяя длину уникальных элементов в «T_F», сгруппированных по «ID», «CAL_YEAR», и если оно больше 1, вернуть «T + F» или же исходный вектор

DF_1$VAR_TF <- with(DF_1, ave(as.character(T_F), ID, CAL_YEAR,
        FUN = function(x) if(length(unique(x)) > 1) "T + F" else x))

identical(DF_1$VAR_TF, as.character(DF_2$VAR_TF))
#[1] TRUE

Или используя dplyr

library(dplyr)
DF_1 %>%
   group_by(ID, CAL_YEAR) %>%
   mutate(VAR_TF = if(n_distinct(T_F) > 1) "T + F" else as.character(T_F))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...