df <- structure(list(ID = c("1", "2", "3", "4", "5", "6"), Column1 = c(NA_character_,
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_
), Column2 = c("2011", "2015", "2015", "2006, 2006, 2005, 2005, 2007",
"2014, 2011", "2007"), `Cut-Off` = c("2011", "2015", "2015",
"2005", "2011", "2007"), `2005` = c(NA, NA, NA, "30", "18", NA
), `2006` = c(NA_character_, NA_character_, NA_character_, NA_character_,
NA_character_, NA_character_), `2007` = c("15", NA, "18", NA,
"30, 18", NA), `2008` = c("16", NA, NA, "30, 27", "18, 30", NA
), `2009` = c("15", NA, NA, "20", "30, 18", NA), `2010` = c(NA,
NA, NA, "30, 20", NA, NA), `2011` = c(NA_character_, NA_character_,
NA_character_, NA_character_, NA_character_, NA_character_),
`2012` = c(NA, NA, NA, "20, 30", NA, "26"), `2013` = c("15",
NA, "19", NA, NA, NA), `2014` = c(NA, NA, "18", NA, NA, NA
), `2015` = c(NA, NA, "18", NA, "18", NA), `2016` = c(NA_character_,
NA_character_, NA_character_, NA_character_, NA_character_,
NA_character_)), .Names = c("ID", "Column1", "Column2", "Cut-Off",
"2005", "2006", "2007", "2008", "2009", "2010", "2011", "2012",
"2013", "2014", "2015", "2016"), row.names = c(NA, 6L), class = "data.frame")
Учитывая вышеприведенный кадр данных. То, что я хотел бы сделать, чтобы R, это посмотреть на год окончания (столбец 4), а затем создать 2 новых столбца в конце кадра данных, где один столбец имеет общее количество уникальных «идентификаторов» внутри каждого элемента за каждый год до года отсечения, а в другой колонке указаны общие числа после года отсечения. Идентификаторы в столбцах год окончания не должны быть включены.
Фрейм данных ниже показывает желаемый результат.
Например, в первой строке годом отсечения является 2011 год, а 2007, 2008 и 2009 годы, предшествующие году отсечения, имеют идентификаторы 15, 16 и 15 соответственно. Таким образом, уникальное количество идентификаторов - 15 и 16 (второе число удалено), а затем оно считается «2» в столбце «До». После года закрытия только 2013 имеет идентификатор, поэтому в столбце «После» он имеет значение «1».
Если в одном элементе есть 2 или более идентификаторов (например, в строках 4 и 5, где указано «30, 27» или «30, 18»), тогда они все равно должны обрабатываться как идентификаторы, разделенные запятой.
df_solution <- structure(list(ID = c("1", "2", "3", "4", "5", "6"), Column1 = c(NA_character_,
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_
), Column2 = c("2011", "2015", "2015", "2006, 2006, 2005, 2005, 2007",
"2014, 2011", "2007"), `Cut-Off` = c("2011", "2015", "2015",
"2005", "2011", "2007"), `2005` = c(NA, NA, NA, "30", "18", NA
), `2006` = c(NA_character_, NA_character_, NA_character_, NA_character_,
NA_character_, NA_character_), `2007` = c("15", NA, "18", NA,
"30, 18", NA), `2008` = c("16", NA, NA, "30, 27", "18, 30", NA
), `2009` = c("15", NA, NA, "20", "30, 18", NA), `2010` = c(NA,
NA, NA, "30, 20", NA, NA), `2011` = c(NA_character_, NA_character_,
NA_character_, NA_character_, NA_character_, NA_character_),
`2012` = c(NA, NA, NA, "20, 30", NA, "26"), `2013` = c("15",
NA, "19", NA, NA, NA), `2014` = c(NA, NA, "18", NA, NA, NA
), `2015` = c(NA, NA, "18", NA, "18", NA), `2016` = c(NA_character_,
NA_character_, NA_character_, NA_character_, NA_character_,
NA_character_), Before = c(2, 0, 2, 0, 2, 0), After = c(1,
0, 0, 3, 1, 1)), .Names = c("ID", "Column1", "Column2", "Cut-Off",
"2005", "2006", "2007", "2008", "2009", "2010", "2011", "2012",
"2013", "2014", "2015", "2016", "Before", "After"), row.names = c(NA,
6L), class = "data.frame")