Проблема с вложением для увеличения l oop - PullRequest
0 голосов
/ 27 апреля 2020

Я собрал некоторые онлайн-данные о поведении и должен проанализировать их, используя R. При загрузке данных не существует уникального идентификатора для каждого участника, кроме даты. Поскольку я анализирую все данные, я написал для l oop, который объединяет все CSV в один фрейм данных, и я хотел бы добавить столбец «участник», который увеличивается на 1 для каждого загружаемого файла (например, pp1, pp2, pp3). Это то, что у меня есть:

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

et c.

Мои извинения, если объяснение не было ясным. Если бы кто-нибудь мог помочь мне понять, что не так с моим кодом, я был бы очень благодарен. Заранее спасибо.

1 Ответ

0 голосов
/ 27 апреля 2020

Вы можете использовать:

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

или более короткое использование map_df из purrr:

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