R - Как добавить строку / наблюдение к кадру данных с типом векторного столбца - PullRequest
0 голосов
/ 13 июня 2019

Я работаю с файлом, который по сути является дампом данных из нескольких таблиц. Я пытаюсь выполнить две операции с данными. Сначала разбейте файл на несколько файлов по одной таблице. У меня это работает. Во-вторых, я хочу создать фрейм данных со следующей структурой:

| table_name       | count | headers                   |
|------------------|-------|---------------------------|
| sample_table     | 5     | header_1,header2,header 3 |
| sample_table_two | 2     | header_1,header_2         |

Предполагается, что столбец «заголовки» является массивом / вектором строк. Всякий раз, когда я пытаюсь запустить код, я получаю следующее сообщение об ошибке:

There were 50 or more warnings (use warnings() to see the first 50)

Выборка выходного сигнала предупреждения:

 Warning messages:
1: In rbind(names(probs), probs_f) :
  number of columns of result is not a multiple of vector length (arg 1)
2: In x[[jj]][iseq] <- vjj :
  number of items to replace is not a multiple of replacement length

Структура colNames выглядит примерно так, как я ожидал:

 $ X4: chr "vendor_uid"
 $ X5: chr "error_code"
 $ X6: chr "date"
 $ X7: chr "status"
 $ X8: chr "is_rebuild"

Однако, что касается значения newRow, последняя запись не соответствует ожиданиям (я предполагал, что это будет вектор).

 $ : chr "amphire_status"
 $ : int 1
 $ :Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   1 obs. of  5 variables:
  ..$ X4: chr "vendor_uid"
  ..$ X5: chr "error_code"
  ..$ X6: chr "date"
  ..$ X7: chr "status"
  ..$ X8: chr "is_rebuild"

В tableDF остальные два столбца выглядят разумно, но столбец «заголовки» содержит только имя / заголовок первого столбца.

'data.frame':   2 obs. of  3 variables:
 $ tableName: chr  "access_log" "amphire_status"
 $ count    : int  81 1
 $ headers  :List of 2
  ..$ : chr "access_uid"
  ..$ : chr "vendor_uid"

Что я делаю не так. Я прошу прощения, если это очевидная ошибка, поскольку я новичок в R. Я ссылался на этот вопрос ., Но не смог решить мою проблему.

РЕДАКТИРОВАТЬ: Не могу поверить, я забыл добавить свой код:

library(tidyverse)
library(jsonlite)


pollFile <- read_csv("sample.csv", col_names = FALSE)
has_data <- function(x) { sum(!is.na(x)) > 0 }
tableDF <- data.frame("tableName" = character(), "count" = integer(), "headers" = vector(), stringsAsFactors = FALSE)

for(name in levels(factor(pollFile$X1) )){

  tmp <- pollFile %>% filter(X1 == name) %>% select(-(X1:X3)) 
  tmp <- tmp %>% select_if(has_data)
  colNames <- tmp[1,]
  newRow <- list(name, nrow(tmp), as.vector(colNames))
  tableDF[nrow(tableDF) + 1, ] <- newRow

  if(count(tmp) > 1) {
    fn <- paste("poll_table/", name,".csv")
    write_csv(tmp,fn,col_names = FALSE)
  }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...