【问题标题】:add values to r dataframe将值添加到 r 数据框
【发布时间】:2020-10-19 08:49:45
【问题描述】:

我想问我如何将新的观察添加/追加到空的 r 数据框。 我将运行一个循环,我想在循环运行时更新这个数据框。

比如说,我有这个数据框:

error <- data.frame(error_code = character(), row_no = character(), sleep_time = character(), time_scrape = character())

我将运行的循环是:

for (i in 1:10) {
  if (i %% 2 == 0) {
    error_code = i
    row_no = i
    sleep_time = 60
    time_scrape = i
   }
error <- error %>% 
add_row(error_code = error_code, row_no = row_no, sleep_time = sleep_time, time_scrape = time_scrape)
}

我想根据从循环中获得的值添加值

我尝试使用 add_row 但它不起作用。我应该怎么做,这样最后我会得到这样的结果:(p/s:下表是手动创建的,而不是上面的代码)

error_code row_no sleep_time time_scrape
1          2      2         60          2
2          4      4         60          4

【问题讨论】:

  • 这能回答你的问题吗? How can a add a row to a data frame in R?
  • 如果 1)您使用 integer() 而不是 character() 初始化数据框(因为您正在存储数字),您的代码将起作用。 2) 取if 块内的add_row 代码。但是,循环增长数据帧效率低下,不是一个好习惯。

标签: r dataframe append


【解决方案1】:

您可以一次性定义 data.frame:

i = as.character(seq(2,10,by=2))
data.frame(error_code = i,row_no = i,sleep_time = 60,time_scrape = i)

如果你绝对,真的,必须这样做,它就是这样工作的:

error <- data.frame(error_code = character(), row_no = character(), sleep_time = character(), time_scrape = character())

for (i in as.character(seq(2,10,by=2))){

error <- error %>%  
add_row(data.frame(error_code = i,
row_no = i,
sleep_time = as.character(60),
time_scrape = i,stringsAsFactors=FALSE))
}

这不是最好的方法。为什么当你的所有列看起来像数字时,它们都是字符?

【讨论】:

  • 这是一个示例.. 实际将存储错误消息
  • 好的,我明白了。最好将它存储在一个列表中,然后再绑定到一个数据帧中,而不是顺序绑定.. 特别是如果你有很多要迭代的时候
【解决方案2】:

您可以使用rbind 来解决这个问题,尽管这非常不理想。来自其他answer 的其他解决方案可能会让我更方便。但也许你需要循环结构。所以给你:

 library(dplyr)

error <- data.frame(error_code = character(), row_no = character(), sleep_time = character(), time_scrape = character())


for (i in 1:10) {
  if (i %% 2 == 0) {
    error_code = i
    row_no = i
    sleep_time = 60
    time_scrape = i
    df<-data.frame(error_code, row_no, sleep_time, time_scrape)
    error <- rbind(error, df)
  }
  #error <- rbind(error, df)
}

【讨论】:

  • 这是here 已经提供的答案。我仍然喜欢在这里添加这个答案,所以 OP 得到了帮助。有时对于初学者来说,学习他们自己的例子并为重复的问题进行转移会更容易。
【解决方案3】:

我认为这应该可以满足您的需求:

     e=c();r=c();s=c();t=c()
     
     for (i in 1:10){
     e[i] = 2*i
     r[i] = 2*i
     t[i] = 2*i
     df=data.frame(error_code=e,row_no=r,sleep_time=60,time_scrape=t)
     }
       }
       
       df

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多