Как создать функцию, получить данные из фрейма данных и вывести их в текстовый файл, используя R - PullRequest
0 голосов
/ 31 марта 2020

Создайте функцию с именем CarPFunction, которая будет принимать CarP (нижеприведенный кадр данных) в качестве входных данных и сохранять (в отдельных строках - с разделителями табуляции) марку, модель и год автомобилей, которые в городе производят более 20 галлонов, в файл .txt.

Производитель Модель Показатель Год выпуска Цирл Дрв ЦТВ ХВИ
audi a4 1.8 1999 4 авто (l5) f 18 29
audi a4 1.8 1999 4 руководство (m5) f 21 29
audi a4 2.0 2008 4 руководство (м6) f 20 31
audi a4 2.0 2008 4 авто (av) f 21 30
audi a4 2.8 1999 6 авто (l5) f 16 26
audi a4 2.8 1999 6 руководство ( m5) f 18 26
audi a4 3.1 2008 6 авто (av) f 18 27
audi a4 quattro 1.8 1999 4 механика (m5) 4 18 26
audi a4 quattro 1.8 1999 4 авто (l5) 4 16 25
audi a4 quattro 2.0 2008 4 руководство (m6) 4 20 28
audi a4 quattro 2.0 2008 4 авто (s6) 4 19 27
audi a4 quattro 2.8 1999 6 авто (l5) 4 15 25
audi a4 quattro 2.8 1999 6 ручных (m5) 4 17 25
audi a4 quattro 3.1 2008 6 auto (s6) 4 17 25
audi a4 quattro 3.1 2008 6 ручных (m6) 4 15 25
audi a6 quattro 3.1 2008 6 авто (s6) 4 17 25

1 Ответ

0 голосов
/ 31 марта 2020

Поскольку у меня не было доступа к исходным данным, вот ответ, который иллюстрирует, как написать файл марки, модели и MPG для автомобилей, которые имеют более 20 MPG из набора данных mtcars.

Сначала мы должны извлечь марку и модель из названий строк и очистить несколько строк.

makeModel <- rownames(mtcars)
strings <- strsplit(makeModel," ")
# clean the data so each row has make and model
strings[[2]] <- c("Mazda","RX4 Wagon")
strings[[4]] <- c("AMC","Hornet 4 Drive")
strings[[5]] <- c("AMC","Hornet Sportabout")
strings[[6]] <- c("Plymouth","Valiant")
strings[[7]] <- c("Plymouth","Duster 360")
strings[[24]] <- c("Chevrolet","Camaro Z28")

Далее мы добавляем make, model и year к фрейму данных. Обратите внимание, что все автомобили mtcars относятся к 1973 - 74 модельному году.

# add make and model to data frame
mtcars$make <- unlist(lapply(1:length(strings),function(x){strings[[x]][1]}))
mtcars$model <- unlist(lapply(1:length(strings),function(x){strings[[x]][2]}))
mtcars$year <- 1973

Теперь мы напишем функцию для чтения данных, подмножество в mpg > 20 и записи только make, model, year и mpg в выходной файл, разделенные табуляцией.

carpFunction <- function(x,outfile = "./mtcarsSubset.txt"){
     outputData <- x[x$mpg > 20,c(12:14,1)]
     write.table(outputData,file=outfile,sep="\t",row.names = FALSE)
}

Мы вызываем функцию для создания выходного файла.

carpFunction(mtcars)

... и вывод при просмотре в текстовом редакторе, таком как UltraEdit, где мы можем видеть вкладки как >>, выглядит следующим образом.

enter image description here

Обратите внимание, теперь, когда ОП опубликовал данные, мы по-прежнему не должны давать полный ответ на домашние вопросы. Методы, использованные в этом ответе, могут быть использованы для ответа на домашнее задание.

Чтобы продемонстрировать это, мы предоставим все, кроме кода в функции carPFunction().

textFile <- "manufacturer|model |displ |year |cyl |trans |drv |cty|hwy 
audi|a4|1.8|1999|4|auto(l5)  |f|18|29         
audi|a4|1.8|1999|4|manual(m5)|f|21|29         
audi|a4|2.0|2008|4|manual(m6)|f|20|31         
audi|a4|2.0|2008|4|auto(av)  |f|21|30         
audi|a4|2.8|1999|6|auto(l5)  |f|16|26         
audi|a4|2.8|1999|6|manual(m5)|f|18|26         
audi|a4|3.1|2008|6|auto(av)  |f|18|27         
audi|a4 quattro|1.8|1999|4|manual(m5)|4|18|26 
audi|a4 quattro|1.8|1999|4|auto(l5)  |4|16|25 
audi|a4 quattro|2.0|2008|4|manual(m6)|4|20|28 
audi|a4 quattro|2.0|2008|4|auto(s6)  |4|19|27 
audi|a4 quattro|2.8|1999|6|auto(l5)  |4|15|25 
audi|a4 quattro|2.8|1999|6|manual(m5)|4|17|25 
audi|a4 quattro|3.1|2008|6|auto(s6)  |4|17|25 
audi|a4 quattro|3.1|2008|6|manual(m6)|4|15|25 
audi|a6 quattro|3.1|2008|6|auto(s6)  |4|17|25 
"
cars <- read.csv(text=textFile,sep="|",stringsAsFactors=FALSE)

carPFunction <- function(x,outfile = "./carPSubset.txt"){
     # code to exactly solve homework 
     # goes here
}
carPFunction(cars)

... и вывод:

enter image description here

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