Получить имя файла и назначить его в качестве имени столбца в функции

#r

#r

Вопрос:

У меня есть несколько csv файлов, которые имеют этот формат:

 xyz         site
2.1         tex1
15.67       tex2
32.111      ny31
 

Я хочу импортировать эти файлы в R. Вот так:

 df_list <- list.files('./usa_data') 
dfs <- lapply(df_list, import_function)
 

Что я хочу import_function сделать, так это взять часть имени файла csv и вставить его вместо имени первого столбца ( xyz ). Мои имена csv имеют такой формат:

 usa_low_dollars_270_1.csv
usa_high_euros_250_2.csv
usa_low_gbp_240_1.csv
 

Я хочу извлечь валюту (третий компонент имени), объединить ее со словом «медиана» и переименовать первый столбец следующим образом:

 dollars_median  site
2.1             tex1
15.67           tex2
32.111          ny31

# or 

euros_median  site
2.1             tex1
15.67           tex2
32.111          ny31

# etc
 

Комментарии:

1. В чем именно проблема из двух? (1) получение имен файлов. (2) извлечение подстроки валюты.

2. Привет, Ян! Второй. Я соответствующим образом отредактировал вопрос.

Ответ №1:

Вы можете использовать lapply вдоль индексов df_list использования seq_along вместо самого вектора.

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

 df_list <- list.files()
df_list
[1] "usa_high_euros_250_2.csv"  "usa_low_dollars_270_1.csv" "usa_low_gbp_240_1.csv"   

lapply(seq_along(df_list), function(x){
  data <- read.csv(df_list[x])
  names(data)[1] <- str_c(strsplit(df_list[x],"_")[[1]][3],"_median")
  data
})
[[1]]
  euros_median site
1        2.100 tex1
2       15.670 tex2
3       32.111 ny31

[[2]]
  dollars_median site
1          2.100 tex1
2         15.670 tex2
3         32.111 ny31

[[3]]
  gbp_median site
1      2.100 tex1
2     15.670 tex2
3     32.111 ny31
 

Ответ №2:

Вы можете извлечь dollar или другие валюты на 3. место строки, так что:

 sp <- stringr::str_split("usa_low_dollars_270_1.csv", '_')[[1]][3]
sp
[1] "dollars"
 

затем вы можете создать свое новое имя следующим образом:

 new <- paste0(sp, '_median')
new
[1] "dollars_median"
 

С помощью этого вы можете обменять colname.

Комментарии:

1. также можно обойти зависимость от пакета stringr с помощью базовой функции R. strsplit()

2. Спасибо. Как я могу это сделать, чтобы мне не нужно было вводить имя каждого файла (у меня более 30 файлов), а чтобы функция распознала имя csv? В первой строке вашего кода, str_split