【问题标题】:How to use loop to create new data.frame如何使用循环创建新的data.frame
【发布时间】:2017-05-26 07:07:28
【问题描述】:

我有 300 个位置,比如说“A1、A2、A3、...、A300”,我有 40 个值。我的位置在 df1 中,我的值在 df2 中。我想将这 40 个值添加到每个位置,位置 A1 的代码从 40 到 40 等等。

我尝试了一个 for 循环:

df1 <- c("A1", "A2", "A3")
df1 <- data.frame(df1)
colnames(df1) <- c("location")

df2 <- c(1:40)
df2 <-data.frame(df2)
colnames(df2) <- c("code")

data <- data.frame() #Empty data.frame

for (i in df2) {
  temp <- df1
  temp$code <- rep(i)
  data1 <- rbind(data, temp)
}

此脚本导致错误:'replacement has 40 rows, data has 315'。

谁能告诉我我该怎么做才能完成这项工作?

期望的输出:

【问题讨论】:

  • 您的描述不清楚。您能否展示一个可重复的小示例和预期输出
  • temp$value &lt;- rep(i) 行在循环中看起来是错误的。 rep(i) 没有 "times" 参数基本上等同于 print(i)

标签: r for-loop


【解决方案1】:

我们可以使用aggregate

aggregate(Value ~Location, df1, sum)

如果值在不同的数据集中并且与原始数据集“位置”中的顺序相同,则只需执行 cbindaggregate

aggregate(Value ~Location, cbind(df1, df2), sum)

假设每个数据集中没有公共列到merge

更新

基于 OP 的更新

expand.grid(location = df1$location, code = df2$code)

CJ 来自data.table

library(data.table)
CJ(location = df1$location, code = df2$code)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多