#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