【问题标题】:Loop variable names in RR中的循环变量名称
【发布时间】:2020-05-26 21:08:30
【问题描述】:

我有一个复杂的数据结构,我想创建一个月度数据集。以下代码是如何构造列。这是一种丑陋的形式。可以使用什么样的策略来简化代码?

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)]

【问题讨论】:

  • 你真的需要一个循环吗?似乎是按操作分组
  • 我建议您向我们展示一些您的数据。编辑您的帖子以显示 dput(head(df2)) 的结果。这将向我们展示您的专栏。我假设你有一个集合 df1, df2, df3 ...?它们都有相同的列吗?

标签: r dataframe


【解决方案1】:

一旦您意识到您可以使用["string"] 对数据进行子集化,您就可以非常轻松地做到这一点。第一个示例展示了它是如何工作的:

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

现在,解决方案仍然是理论上的。如果没有您的数据样本,我必须“推理”。但它应该向您展示它是如何工作的,即使它仍然没有,它也足够接近,这样您就可以找到您的 onw 了。

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)]
}

【讨论】:

    猜你喜欢
    • 2016-02-26
    • 2019-01-31
    • 2022-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多