【问题标题】:How to create new data frames in a for loop如何在 for 循环中创建新的数据框
【发布时间】:2021-08-15 22:21:35
【问题描述】:

我想把下面的代码压缩成一个for循环:

day1 = data.frame(cbind("ID" = data$ID, "outcome" = outcome, "age" = age, "day" = days[,1], "val" = val[,1]))
day2 = data.frame(cbind("ID" = data$ID, "outcome" = outcome, "age" = age, "day" = days[,2], "val" = val[,2]))
day3 = data.frame(cbind("ID" = data$ID, "outcome" = outcome, "age" = age, "day" = days[,3], "val" = val[,3]))
day4 = data.frame(cbind("ID" = data$ID, "outcome" = outcome, "age" = age, "day" = days[,4], "val" = val[,4]))
day5 = data.frame(cbind("ID" = data$ID, "outcome" = outcome, "age" = age, "day" = days[,5], "val" = val[,5]))
day6 = data.frame(cbind("ID" = data$ID, "outcome" = outcome, "age" = age, "day" = days[,6], "val" = val[,6]))
day7 = data.frame(cbind("ID" = data$ID, "outcome" = outcome, "age" = age, "day" = days[,7], "val" = val[,7]))

我正在尝试创建 7 个名为 day1day7 的数据框。我还想从daysval 数据框中的相应列中提取信息。我已经编写了以下 for 循环,但它不起作用。有什么建议吗?

for (i in 1:7) {
  name = paste0("day",i)
  name <- data.frame(cbind("ID" = data$ID, 
                           "outcome" = outcome, 
                           "age" = age, 
                           "day" = days[i], 
                           "val" = val[i]))
}

【问题讨论】:

  • 考虑一个lapply 解决方案,以避免初始化列表和按索引迭代分配的簿记。此外,不需要cbind 或引用名称:df_list &lt;- lapply(1:7, function(i) data.frame(ID = data$ID, ..., day = days[,i], val = val[,i]))

标签: r dataframe for-loop iteration


【解决方案1】:

类似于您要求的(来自 for 循环的名为 dayi 的数据帧):

day <- list()
for (i in 1:7) {
  day[[i]] <- data.frame(cbind("ID" = data$ID, 
                           "outcome" = outcome, 
                           "age" = age, 
                           "day" = days[i], 
                           "val" = val[i]))
}

唯一的区别是您的数据框将由 day[[i]] 而不是 dayi 调用。这样做的好处是将它们全部组合在一个列表中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 2021-09-03
    相关资源
    最近更新 更多