【问题标题】:Issue with nested for loop incrementing嵌套for循环递增的问题
【发布时间】:2020-04-27 09:16:12
【问题描述】:

我收集了一些在线行为数据,必须使用 R 对其进行分析。下载数据时,每个参与者除了日期之外没有唯一标识符。因为我正在分析所有数据,所以我编写了一个 for 循环,将所有 CSV 合并到一个数据帧中,我想添加一个“参与者”列,为每个加载的文件增加 1(例如 pp1、pp2 ,第 3 页)。这是我目前所拥有的:

OnExpDir = dir()
#Files begin with "PARTICIPANT" but no ID
OnExpList=grep("PARTICIPANT", OnExpDir, value = T)

#Binding data to one table
OnExpData=NULL
for(myfile in OnExpList)
{
  fullExpFileName = paste(getwd(), "/", myfile, sep = "")
  TMPData = read.csv(fullExpFileName, header = T, stringsAsFactors = T)
  #Attempting to add a participant ID
  for(i in 1:length(OnExpList))
  {
    TMPData$pp[i] = paste("pp",i)
  }
  OnExpData = rbind(OnExpData, TMPData)
}

产生以下结果:

|---------------------|------------------|
|         data        |        pp        |
|---------------------|------------------|
|          data1      |         pp1      |
|---------------------|------------------|
|          data2      |         pp2      |
|---------------------|------------------|
|          data3      |         pp3      |
|---------------------|------------------|
|          data1      |         pp1      |
|---------------------|------------------|
|          data2      |         pp2      |
|---------------------|------------------|
|          data3      |         pp3      |
|---------------------|------------------|

然而,这不是我想要的。它应该更像是:

|---------------------|------------------|
|         data        |        pp        |
|---------------------|------------------|
|          data1      |         pp1      |
|---------------------|------------------|
|          data2      |         pp1      |
|---------------------|------------------|
|          data3      |         pp1      |
|---------------------|------------------|
|          data1      |         pp2      |
|---------------------|------------------|
|          data2      |         pp2      |
|---------------------|------------------|
|          data3      |         pp2      |
|---------------------|------------------|

等等

如果解释不清楚,我深表歉意。如果有人能帮助我理解我的代码有什么问题,我将不胜感激。提前谢谢你。

【问题讨论】:

    标签: r loops for-loop increment


    【解决方案1】:

    你可以使用:

    OnExpData <- do.call(rbind, Map(function(x, y) transform(read.csv(x), 
                          pp = paste0('pp', y)), 
                          paste0(getwd(), "/", OnExpList), seq_along(OnExpList)))
    

    或者使用来自purrrmap_df 更短:

    purrr::map_df(paste0(getwd(), "/", OnExpList), read.csv, .id = "pp")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-13
      • 1970-01-01
      • 2022-06-12
      • 1970-01-01
      • 1970-01-01
      • 2014-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多