Я ищу эффективный способ построения на базе данных с несколькими условными комбинациями. Процесс, который я пытаюсь превратить в какую-то гибкую функцию «create-df», работает следующим образом:
# STEP 1
level.1 <- c("Netherlands", "New Zealand", "Europe")
# STEP 2:
level.1 <- c("Netherlands", "New Zealand", "Europe", "Europe")
level.2 <- c(NA, NA, "London", "Paris")
df <- data.frame(level.1, level.2)
df
# STEP 3:
level.1 <- c("Netherlands", "New Zealand", "Europe", "Europe", "Europe", "Europe")
level.2 <- c(NA, NA, "London", "London", "Paris", "Paris")
level.3 <- c(NA, NA, "City", "Roads", "City", "Roads")
data.frame(level.1, level.2, level.3)
# STEP 4:
level.1 <- c("Netherlands", "New Zealand", "Europe", "Europe", "Europe", "Europe", "Europe", "Europe")
level.2 <- c(NA, NA, "London", "London", "London", "London", "Paris", "Paris")
level.3 <- c(NA, NA, "City", "City", "Roads", "Roads", "City", "Roads")
level.4 <- c(NA, NA, "A-Regulated", "G-Regulated", "A-Regulated", "G-Regulated", NA, NA)
data.frame(level.1, level.2, level.3, level.4)
Часть, которую я хотел бы сделать гибкой, заключается в том, что если я добавлю новуюпеременная для этих столбцов, она будет знать, какое правило следовать. Поэтому, если я добавлю новый уровень к уровню 4 и скажу, что он называется «C-Regulated», который будет соответствовать лондонской группе, это создаст дополнительные две строки для уровня 3, чтобы каждая комбинация была с C-Regulated, как показано ниже. .
level.1 <- c("Netherlands", "New Zealand", "Europe", "Europe", "Europe", "Europe", "Europe", "Europe", "Europe", "Europe")
level.2 <- c(NA, NA, "London", "London", "London", "London", "London", "London", "Paris", "Paris")
level.3 <- c(NA, NA, "City", "City", "City", "Roads", "Roads", "Roads", "City", "Roads")
level.4 <- c(NA, NA, "A-Regulated", "G-Regulated", "C-Regulated", "A-Regulated", "G-Regulated", "C-Regulated", NA, NA)
data.frame(level.1, level.2, level.3, level.4)
Я играл с этим в цикле for и с помощью expand.grid () для создания фреймов данных, но я застрял с мышлением операторов if-else, и Донне хочу просто создавать длинный неэффективный код. Любой совет?