對于資料框,我想將每列的資料類(例如 char、double、factor)保存到 csv,然后能夠將資料和類讀回 R。
例如,我的資料可能如下所示:
df
#> # A tibble: 3 × 3
#> item cost blue
#> <int> <int> <fct>
#> 1 1 4 1
#> 2 2 10 1
#> 3 3 3 0
(此處輸入資料的代碼:)
library(tidyverse)
df <- tibble::tribble(
~item, ~cost, ~blue,
1L, 4L, 1L,
2L, 10L, 1L,
3L, 3L, 0L
)
df <- df %>%
mutate(blue = as.factor(blue))
df
我可以這樣保存資料的類和資料:
library(tidyverse)
classes <- map_df(df, class)
write_csv(classes, "classes.csv")
write_csv(df, "data.csv")
我可以這樣讀回來:
classes <- read.csv("classes.csv") %>%
slice(1) %>%
unlist()
classes
df2 <- read_csv("data.csv", col_types = classes)
df2
有沒有更快的方法來完成所有這些?
特別是我保存classes然后再讀回來的方式,然后切片和取消上市?
uj5u.com熱心網友回復:
您可以在課程中使用writeLines及其對應物readLines。像這樣:
classes <- sapply(df, class)
writeLines(classes, "classes.txt")
#to read them
readLines("classes.txt")
但是,還要考慮其他格式,例如parquet(R 實作由arrow包提供),例如保留資料型別并由多種語言實作的格式。
uj5u.com熱心網友回復:
試試 csvy 包。另請參閱http://csvy.org/站點。這會生成一個檔案而不是兩個檔案,簡化了使用它的作業,還有其他一些語言的 csvy 閱讀器(請參閱剛剛參考的鏈接),格式是標準化的并且與 csv 向后兼容,這可能比滾動您自己的格式更好.
library(csvy)
write_csvy(df, "df.csvy")
這會產生這個檔案:
#---
#profile: tabular-data-package
#name: df
#fields:
#- name: item
# type: integer
#- name: cost
# type: integer
#- name: blue
# type: integer
#---
item,cost,blue
1,4,1
2,10,1
3,3,0
可以在使用時讀回:
read_csvy("df.csvy")
或read.csv("df.csvy", comment.char = "#")任何數量的具有讀取 csv 檔案功能的 R 包。
我們可以使用以下方法將元資料提取為串列:
library(yaml)
md <- get_yaml_header("df.csvy")
md_list <- yaml.load(paste(md, collapse = "\n"))
str(md_list)
## List of 3
## $ profile: chr "tabular-data-package"
## $ name : chr "df"
## $ fields :List of 3
## ..$ :List of 2
## .. ..$ name: chr "item"
## .. ..$ type: chr "integer"
## ..$ :List of 2
## .. ..$ name: chr "cost"
## .. ..$ type: chr "integer"
## ..$ :List of 2
## .. ..$ name: chr "blue"
## .. ..$ type: chr "integer"
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/368516.html
上一篇:洗掉兩行都有非零數字的列?
下一篇:繪制多個變數,繪圖顯示灰色?
