[英]Adding column names to dataframe while reading a csv in r
我的目錄中有多個.csv文件,它們沒有列名。 所以在沒有標題的情況下讀取它們會出錯
match.names(clabs,names(xi))中的錯誤:名稱與以前的名稱不匹配。
因此,出於這個原因,我想將列名稱附加到這些csv文件中,並將它們全部組合到一個數據幀中,但是在讀取它們時,我無法將列名稱添加到這些csv文件中。 文件名就像test_abc.csv
, test_pqr.csv
, test_xyz.csv
等。這是我嘗試過的
temp = list.files(pattern="*.csv")
read_csv_filename <- function(filename){
ret <- read.csv(filename,header = F)
ret$city <- gsub(".*[_]([^.]+)[.].*", "\\1", filename)
ret
}
df_all <- do.call(rbind,lapply(temp,read_csv_filename))
如何在閱讀時在此處向每個文件添加標題?
這是我在閱讀時要添加的名稱
colnames = c("Age","Gender","height","weight")
有什么建議嗎?
使用tidyverse
包,您可以使用purrr::map_dfr
函數很好地完成此purrr::map_dfr
,該函數迭代一個列表,對每次返回一個數據幀的每個元素執行一些功能,並將這些數據幀行綁定在一起。
library(readr)
library(purrr)
library(dplyr) # only used in example set up
# Setting up some example csv files to work with
mtcars_slim <- select(mtcars, 1:3)
write_csv(slice(mtcars_slim, 1:4), "mtcars_1.csv", col_names = FALSE)
write_csv(slice(mtcars_slim, 5:10), "mtcars_2.csv", col_names = FALSE)
write_csv(slice(mtcars_slim, 11:1), "mtcars_3.csv", col_names = FALSE)
# get file paths, read them all, and row-bind them all
dir(pattern = "mtcars_\\d+\\.csv") %>%
map_dfr(read_csv, col_names = c("mpg", "cyl", "disp"))
#> Parsed with column specification:
#> cols(
#> mpg = col_double(),
#> cyl = col_integer(),
#> disp = col_integer()
#> )
#> # A tibble: 21 x 3
#> mpg cyl disp
#> <dbl> <int> <dbl>
#> 1 21.0 6 160.0
#> 2 21.0 6 160.0
#> 3 22.8 4 108.0
#> 4 21.4 6 258.0
#> 5 18.7 8 360.0
#> 6 18.1 6 225.0
#> 7 14.3 8 360.0
#> 8 24.4 4 146.7
#> 9 22.8 4 140.8
#> 10 19.2 6 167.6
#> # ... with 11 more rows
您可以像這樣在循環本身中放入colnames
temp = list.files(pattern="*.csv")
read_csv_filename <- function(filename){
ret <- read.csv(filename,header = F)
ret$city <- gsub(".*[_]([^.]+)[.].*", "\\1", filename)
colnames(ret) <- c("Age","Gender","height","weight","city")
ret
}
df_all <- do.call(rbind,lapply(temp,read_csv_filename))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.