L oop имена переменных в R - PullRequest
0 голосов
/ 27 мая 2020

У меня сложная структура данных, и я хотел бы создать ежемесячный набор данных. В следующем коде показано, как создавать столбцы. Это уродливая форма. Какую стратегию можно использовать для упрощения кода?

df2$emp_01 = df$month1_emplvl[which(df$qtr == 1)]
df2$emp_02 = df$month2_emplvl[which(df$qtr == 1)]
df2$emp_03 = df$month3_emplvl[which(df$qtr == 1)]
df2$emp_04 = df$month1_emplvl[which(df$qtr == 2)]
df2$emp_05 = df$month2_emplvl[which(df$qtr == 2)]
df2$emp_06 = df$month3_emplvl[which(df$qtr == 2)]
df2$emp_07 = df$month1_emplvl[which(df$qtr == 3)]
df2$emp_08 = df$month2_emplvl[which(df$qtr == 3)]
df2$emp_09 = df$month3_emplvl[which(df$qtr == 3)]
df2$emp_10 = df$month1_emplvl[which(df$qtr == 4)]
df2$emp_11 = df$month2_emplvl[which(df$qtr == 4)]
df2$emp_12 = df$month3_emplvl[which(df$qtr == 4)]

1 Ответ

0 голосов
/ 27 мая 2020

Вы можете сделать это на удивление легко, если поймете, что вы можете подмножество данных с помощью ["string"]. Этот первый пример показывает, как это работает:

for (i in 1:12) {
  month <- paste0("month", ((i-1) %% 3)+1, "_emplvl")
  thisqtr <- ( (i-1) %/% 3)+1
  cat(month, "  ", thisqtr, "\n")
}

Теперь решение остается теоретическим. Без образца ваших данных я вынужден "теоретизировать". Но он должен показать вам, как это работает, и даже если он все еще не работает, он достаточно близок, чтобы вы могли найти свой новый с этим.

for (i in 1:12) {
  month <- paste0("month", ((i-1) %% 3)+1, "_emplvl")
  thisqtr <- ( (i-1) %/% 3)+1
  df2[[paste0("emp_", i)]] <- df[[month]][which(df$qtr == thisqtr)]
}
...