Переименование имен подколонок, а затем создание фрейма данных с использованием переименованного столбца в R - PullRequest
0 голосов
/ 16 февраля 2020

У меня сложный набор данных 3922327258060dat.txt , для которого мне нужно создать функцию для чтения трех столбцов. Этот набор данных имеет несколько столбцов, из этих столбцов мне нужно изменить имя 3 столбцов (Date, HrMn, Slp) на (Date, Time, AtmosPressure) и затем создать кадр данных из этих 3 столбцов. Но хитрая вещь в том, что столбцы имеют подзаголовок в виде этих имен (Date, HrMn, Slp), так как когда я пытаюсь написать colnames(noaaFilename), это дает мне этот результат "Identification" "SLP" "X3" Я пытаюсь сделать это, но не могу получить результат с именами и значениями подстолбцов.

Помогите, пожалуйста, создать фрейм данных с тремя основными столбцами с именами «Дата», «Время», «АтмосПрессура»

noaaFilename <- read_table2("3922327258060dat.txt")

readNOAAData <- function(filename=noaaFilename) {

  colnames(noaaFilename)
  noaaFilename <- read_table2("3922327258060dat.txt")

  names(noaaFilename)[names(noaaFilename) == "Date"] <- "Date"
  names(noaaFilename)[names(noaaFilename) == "HrMn"] <- "Time"
  names(noaaFilename)[names(noaaFilename) == "Slp"] <- "AtmosPressure"

  noaaFiledf <- data.frame(Date, Time, AtmosPressure)

  noaaData <- subset(noaaFilename, Name == "ATLANTIC CITY", select = c("Date", "Time", "AtmosPressure"))

  ## Stop editing here
  return(noaaData)
}

Извините, как это слишком долго

dput(head(noaaFilename, 20))
structure(list(Identification = c("Name", "ATLANTIC", "ATLANTIC", 
"ATLANTIC", "ATLANTIC", "ATLANTIC", "ATLANTIC", "ATLANTIC", "ATLANTIC", 
"ATLANTIC", "ATLANTIC", "ATLANTIC", "ATLANTIC", "ATLANTIC", "ATLANTIC", 
"ATLANTIC", "ATLANTIC", "ATLANTIC", "ATLANTIC", "ATLANTIC"), 
    SLP = c("USAF", "CITY", "CITY", "CITY", "CITY", "CITY", "CITY", 
    "CITY", "CITY", "CITY", "CITY", "CITY", "CITY", "CITY", "CITY", 
    "CITY", "CITY", "CITY", "CITY", "CITY"), X3 = c("NCDC", ",997270,99999,20121029,0000,4,FM-18,", 
    ",997270,99999,20121029,0100,4,FM-18,", ",997270,99999,20121029,0200,4,FM-18,", 
    ",997270,99999,20121029,0300,4,FM-18,", ",997270,99999,20121029,0400,4,FM-18,", 
    ",997270,99999,20121029,0500,4,FM-18,", ",997270,99999,20121029,0600,4,FM-18,", 
    ",997270,99999,20121029,0700,4,FM-18,", ",997270,99999,20121029,0800,4,FM-18,", 
    ",997270,99999,20121029,0900,4,FM-18,", ",997270,99999,20121029,1000,4,FM-18,", 
    ",997270,99999,20121029,1100,4,FM-18,", ",997270,99999,20121029,1200,4,FM-18,", 
    ",997270,99999,20121029,1300,4,FM-18,", ",997270,99999,20121029,1400,4,FM-18,", 
    ",997270,99999,20121029,1500,4,FM-18,", ",997270,99999,20121029,1600,4,FM-18,", 
    ",997270,99999,20121029,1700,4,FM-18,", ",997270,99999,20121029,1800,4,FM-18,"
    )), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-20L), problems = structure(list(row = 1:94, col = c(NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_), expected = c("3 columns", 
"3 columns", "3 columns", "3 columns", "3 columns", "3 columns", 
"3 columns", "3 columns", "3 columns", "3 columns", "3 columns", 
"3 columns", "3 columns", "3 columns", "3 columns", "3 columns", 
"3 columns", "3 columns", "3 columns", "3 columns", "3 columns", 
"3 columns", "3 columns", "3 columns", "3 columns", "3 columns", 
"3 columns", "3 columns", "3 columns", "3 columns", "3 columns", 
"3 columns", "3 columns", "3 columns", "3 columns", "3 columns", 
"3 columns", "3 columns", "3 columns", "3 columns", "3 columns", 
"3 columns", "3 columns", "3 columns", "3 columns", "3 columns", 
"3 columns", "3 columns", "3 columns", "3 columns", "3 columns", 
"3 columns", "3 columns", "3 columns", "3 columns", "3 columns", 
"3 columns", "3 columns", "3 columns", "3 columns", "3 columns", 
"3 columns", "3 columns", "3 columns", "3 columns", "3 columns", 
"3 columns", "3 columns", "3 columns", "3 columns", "3 columns", 
"3 columns", "3 columns", "3 columns", "3 columns", "3 columns", 
"3 columns", "3 columns", "3 columns", "3 columns", "3 columns", 
"3 columns", "3 columns", "3 columns", "3 columns", "3 columns", 
"3 columns", "3 columns", "3 columns", "3 columns", "3 columns", 
"3 columns", "3 columns", "3 columns"), actual = c("11 columns", 
"5 columns", "5 columns", "5 columns", "5 columns", "5 columns", 
"5 columns", "5 columns", "5 columns", "5 columns", "5 columns", 
"5 columns", "5 columns", "5 columns", "5 columns", "5 columns", 
"5 columns", "5 columns", "5 columns", "5 columns", "5 columns", 
"5 columns", "5 columns", "5 columns", "5 columns", "5 columns", 
"5 columns", "5 columns", "5 columns", "5 columns", "5 columns", 
"5 columns", "5 columns", "5 columns", "5 columns", "5 columns", 
"5 columns", "5 columns", "5 columns", "5 columns", "5 columns", 
"5 columns", "5 columns", "5 columns", "5 columns", "5 columns", 
"5 columns", "5 columns", "5 columns", "5 columns", "5 columns", 
"5 columns", "5 columns", "5 columns", "5 columns", "5 columns", 
"5 columns", "5 columns", "5 columns", "5 columns", "4 columns", 
"4 columns", "4 columns", "5 columns", "5 columns", "5 columns", 
"5 columns", "4 columns", "4 columns", "4 columns", "4 columns", 
"4 columns", "4 columns", "4 columns", "4 columns", "4 columns", 
"4 columns", "4 columns", "4 columns", "4 columns", "4 columns", 
"4 columns", "4 columns", "4 columns", "4 columns", "4 columns", 
"4 columns", "4 columns", "4 columns", "4 columns", "4 columns", 
"4 columns", "4 columns", "4 columns"), file = c("'3922327258060dat.txt'", 
"'3922327258060dat.txt'", "'3922327258060dat.txt'", "'3922327258060dat.txt'", 
"'3922327258060dat.txt'", "'3922327258060dat.txt'", "'3922327258060dat.txt'", 
"'3922327258060dat.txt'", "'3922327258060dat.txt'", "'3922327258060dat.txt'", 
"'3922327258060dat.txt'", "'3922327258060dat.txt'", "'3922327258060dat.txt'", 
"'3922327258060dat.txt'", "'3922327258060dat.txt'", "'3922327258060dat.txt'", 
"'3922327258060dat.txt'", "'3922327258060dat.txt'", "'3922327258060dat.txt'", 
"'3922327258060dat.txt'", "'3922327258060dat.txt'", "'3922327258060dat.txt'", 
"'3922327258060dat.txt'", "'3922327258060dat.txt'", "'3922327258060dat.txt'", 
"'3922327258060dat.txt'", "'3922327258060dat.txt'", "'3922327258060dat.txt'", 
"'3922327258060dat.txt'", "'3922327258060dat.txt'", "'3922327258060dat.txt'", 
"'3922327258060dat.txt'", "'3922327258060dat.txt'", "'3922327258060dat.txt'", 
"'3922327258060dat.txt'", "'3922327258060dat.txt'", "'3922327258060dat.txt'", 
"'3922327258060dat.txt'", "'3922327258060dat.txt'", "'3922327258060dat.txt'", 
"'3922327258060dat.txt'", "'3922327258060dat.txt'", "'3922327258060dat.txt'", 
"'3922327258060dat.txt'", "'3922327258060dat.txt'", "'3922327258060dat.txt'", 
"'3922327258060dat.txt'", "'3922327258060dat.txt'", "'3922327258060dat.txt'", 
"'3922327258060dat.txt'", "'3922327258060dat.txt'", "'3922327258060dat.txt'", 
"'3922327258060dat.txt'", "'3922327258060dat.txt'", "'3922327258060dat.txt'", 
"'3922327258060dat.txt'", "'3922327258060dat.txt'", "'3922327258060dat.txt'", 
"'3922327258060dat.txt'", "'3922327258060dat.txt'", "'3922327258060dat.txt'", 
"'3922327258060dat.txt'", "'3922327258060dat.txt'", "'3922327258060dat.txt'", 
"'3922327258060dat.txt'", "'3922327258060dat.txt'", "'3922327258060dat.txt'", 
"'3922327258060dat.txt'", "'3922327258060dat.txt'", "'3922327258060dat.txt'", 
"'3922327258060dat.txt'", "'3922327258060dat.txt'", "'3922327258060dat.txt'", 
"'3922327258060dat.txt'", "'3922327258060dat.txt'", "'3922327258060dat.txt'", 
"'3922327258060dat.txt'", "'3922327258060dat.txt'", "'3922327258060dat.txt'", 
"'3922327258060dat.txt'", "'3922327258060dat.txt'", "'3922327258060dat.txt'", 
"'3922327258060dat.txt'", "'3922327258060dat.txt'", "'3922327258060dat.txt'", 
"'3922327258060dat.txt'", "'3922327258060dat.txt'", "'3922327258060dat.txt'", 
"'3922327258060dat.txt'", "'3922327258060dat.txt'", "'3922327258060dat.txt'", 
"'3922327258060dat.txt'", "'3922327258060dat.txt'", "'3922327258060dat.txt'"
)), row.names = c(NA, -94L), class = c("tbl_df", "tbl", "data.frame"
)))

Ответы [ 3 ]

1 голос
/ 18 февраля 2020

Здесь у нас есть одна строка, которую следует пропустить, за которой следует заголовок без запятых, а затем массив данных, разделенных запятыми. Вот альтернативный подход, который использует функцию scan для извлечения имен столбцов, разделенных пробелами. (Требовалось добавить дополнительное значение к 'col.names' для учета запятых в каждой из строк данных.):

input <- read.table( "~/CSV3.txt", sep=",", skip=2,
                      col.names=scan("~/CSV3.txt", what="", sep="", skip=1,n=11))
Read 11 items
#-------------------
input
                        Name   USAF  NCDC     Date HrMn I  Type QCP   sip Q ATLANTIC
1 ATLANTIC CITY              997270 99999 20121029    0 4 FM-18  NA 999.9 1       NA
2 ATLANTIC CITY              997270 99999 20121029  200 4 FM-18  NA 999.2 1       NA
3 ATLANTIC CITY              997270 99999 20121029  300 4 FM-18  NA 998.3 1       NA

Аргумент заголовка по умолчанию для read.table - FALSE. Функция scan требует аргумент «что» для указания типа столбца. Он может быть задан либо как один из определенных типов, либо как в данном случае в качестве примера, поскольку "" является символьным значением.

Чтобы разрешить поднабору правильно проходить завершающие пробелы из процесса inluyt столбца 1 необходимо исправить. Сначала обратите внимание на сбой процесса: пробелы или табуляции):

input[[1]] <- trimws(input[[1]])
noaaData <- subset(input, Name == "ATLANTIC CITY", select = c("Date", "Time", "AtmosPressure"))
noaaData
#-----------------
      Date Time AtmosPressure
1 20121029    0         999.9
2 20121029  200         999.2
3 20121029  300         998.3

Успех наконец.

Sample text file
------------------
Identification                                                       SLP 
Name                       USAF    NCDC Date     HrMn I Type QCP   sip Q
ATLANTIC CITY             ,997270,99999,20121029,0000,4,FM-18, , 999.9,1,
ATLANTIC CITY             ,997270,99999,20121029,0200,4,FM-18, , 999.2,1,
ATLANTIC CITY             ,997270,99999,20121029,0300,4,FM-18, , 998.3,1,
1 голос
/ 16 февраля 2020

Сложность заключается в том, что заголовки столбцов не имеют запятых между ними.

Может быть способ импортировать этот набор данных, не редактируя его вручную. Если вы можете легко отредактировать его, я бы это сделал. Откройте текстовый файл, удалите первую строку, вставьте запятые между именами столбцов в текущей первой строке (ранее во второй строке), сохраните файл и повторите попытку без аргумента skip=1.

Если вы не можете редактировать файл или вам нужно делать это много раз, то может быть решение для импорта файла без необходимости его редактирования.

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

Редактировать : или пропустить первые две строки, так как заголовки разделены пробелом, а данные разделены запятые.

dat <- read.csv("3922327258060dat.txt", skip=2, header=FALSE) # Added header thanks to 42
dat3 <- dat[,c(4,5,9)]
names(dat3) <- c("Date","Time","AtmosPressure")
0 голосов
/ 16 февраля 2020

Рассмотрим read.csv (обёртка до read.table) с пропуском (во избежание проблем c, строки, не относящиеся к бою) и col.names (для всех столбцов ) аргументы:

noaaRaw <- read.csv('3922327258060dat.txt',
                    skip = 2,
                    header = FALSE,
                    col.names = c("Name", "USAF", "NCDC", 
                                  "Date", "Time", "I", 
                                  "Type", "QCP", "AtmosPressure", "Q")
           )

noaaData <- subset(noaaRaw, Name == "ATLANTIC CITY", 
                   select = c(Date, Time, AtmosPressure)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...