При включении в функцию расчет перестает работать в т - PullRequest
0 голосов
/ 26 июня 2018

Вот как выглядят данные:

         V1       V2   V3      V4           V5 V6   V7
1 1002000000 20180317 1PAC 000000000011000+ 33 33 6171985
2 1002000001 20050202 1PRM 000000000017376+ 20 20 7011985
3 1002000001 20050503 1PRM 000000000017376+ 20 20 7011985
4 1002000001 20050803 1PRM 000000000017376+ 21 21 7011985
5 1002000001 20051031 1PRM 000000000017376+ 21 21 7011985
6 1002000001 20060130 1PRM 000000000017376+ 21 21 7011985

Вот мой код:

ULtrans <- read.table("ULTRANS.txt", sep = "", header = F)
ULtrans <- ULtrans[,-c(5,6)] #remove unused columns
names(ULtrans) <- c("pol_num", "trans_date", "type", "amt", "iss_date")
convert_amt <- function(x){
  as.integer(substr(x,1,nchar(x)-1))*ifelse(substr(x,nchar(x),nchar(x))=="-",-1,1)
}
ULtrans$amt <- convert_amt(as.character(ULtrans$amt))
ULtrans$trans_date <- ymd(ULtrans$trans_date) 
ULtrans$iss_date <- mdy(ULtrans$iss_date)

Я пытался поместить это в метод, потому что я должен очистить несколько файлов таким же образом. Я поместил это в метод, который выглядит следующим образом:

format_trans <- function(x){
x[,-c(5,6)]
names(x) <- c("pol_num", "trans_date", "type", "amt", "iss_date")

convert_amt <- function(x){
as.integer(substr(x,1,nchar(x)-1))*ifelse(substr(x,nchar(x),nchar(x))=="-",-1,1)
}
x$amt <- convert_amt(as.character(x$amt))

x$trans_date <- ymd(x$trans_date) 
x$iss_date <- mdy(x$iss_date)
}

Когда я пытаюсь использовать метод, который я сделал, он выдает мне предупреждающее сообщение. "Не удалось проанализировать все форматы. Форматы не найдены." Когда я не использую метод, я получаю очищенные даты и суммы транзакций.

1 Ответ

0 голосов
/ 27 июня 2018

В вашем коде есть две проблемы. Во-первых, вы используете неправильный синтаксис для удаления ненужных столбцов. Во-вторых, вы не возвращаете очищенный data.frame в конце, поэтому он существует только внутри функциональной среды.

Я вставил данные вашего примера в файл. Вот предложение: поскольку вы собираетесь чистить много файлов в одном и том же формате, вы можете поместить read.table в функцию. Вы также можете выбрать нужные столбцы в одной строке.

read.and.clean <- function(file) {

  require('lubridate')

  ULtrans <- read.table(file)[c(1:4,7)]
  names(ULtrans) <- c("pol_num", "trans_date", "type", "amt", "iss_date")

  convert_amt <- function(x){
    as.integer(substr(x,1,nchar(x)-1))*ifelse(substr(x,nchar(x),nchar(x))=="-",-1,1)
  }

  ULtrans$amt <- convert_amt(as.character(ULtrans$amt))
  ULtrans$trans_date <- ymd(ULtrans$trans_date) 
  ULtrans$iss_date <- mdy(ULtrans$iss_date)

  return(ULtrans)
}

df <- read.and.clean("example.txt")

> df
     pol_num trans_date type   amt   iss_date
1 1002000000 2018-03-17 1PAC 11000 1985-06-17
2 1002000001 2005-02-02 1PRM 17376 1985-07-01
3 1002000001 2005-05-03 1PRM 17376 1985-07-01
4 1002000001 2005-08-03 1PRM 17376 1985-07-01
5 1002000001 2005-10-31 1PRM 17376 1985-07-01
6 1002000001 2006-01-30 1PRM 17376 1985-07-01

OBS: всегда приятно сообщить о любом дополнительном пакете, необходимом для работы вашего примера.

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