Sei que isso já foi feito antes, mas estou com dificuldades para fazer funcionar com meu código. Tenho vários arquivos .csv com títulos/números de colunas diferentes. As colunas estão na mesma ordem e eu só preciso das 3 primeiras colunas e depois substituir os títulos das colunas para que fiquem iguais.
y_path <- "Y:\\Public\\xx\\DataLoggers\\WaterTemp\\DarkCanyon\\DC Trib 1A\\"
all_csv <- list.files(path = y_path, pattern = '.csv', full.names = TRUE)
open_csv <- lapply(all_csv, \(x) fread(x,skip=2))
one_df <- data.table::rbindlist(open_csv, fill=TRUE, idcol='names(all_csv)')
one_df
df1<-one_df %>% select(1:3)
df1
colnames(df1) <- c("numb","datetime","temp") #change column names
saída:
numb datetime temp
<int> <char> <num>
1: 1 6/30/2014 13:37 17.272
2: 2 6/30/2014 14:37 18.438
3: 3 6/30/2014 15:37 18.152
4: 4 6/30/2014 16:37 18.176
5: 5 6/30/2014 17:37 18.200
---
46230: 915 07/29/24 01:41:52 PM 11.722
46231: 916 07/29/24 02:41:52 PM 12.401
46232: 917 07/29/24 03:41:52 PM 13.269
46233: 918 07/29/24 04:10:09 PM NA
46234: 919 07/29/24 04:10:12 PM NA
O problema é que eu realmente quero incluir o caminho, porque o ideal seria pegar todos esses arquivos de dentro da pasta WaterTemp em vez de executar o código individualmente para cada subpasta separadamente. Assim que eu tiver o caminho, devo conseguir extrair o nome do nível da pasta (site) dele. Não sei como, com a forma como codifiquei isso, incluir o nome do caminho em uma nova coluna.
O que eu quero
numb datetime temp Site
<int> <char> <num> <char>
1: 1 6/30/2014 13:37 17.272 Y:\\Public\\Fisher Group\\DataLoggers\\WaterTemp\\DarkCanyon\\DC Trib 1A\\
2: 2 6/30/2014 14:37 18.438 Y:\\Public\\Fisher Group\\DataLoggers\\WaterTemp\\DarkCanyon\\DC Trib 1A\\
3: 3 6/30/2014 15:37 18.152 Y:\\Public\\Fisher Group\\DataLoggers\\WaterTemp\\DarkCanyon\\DC Trib 1A\\
4: 4 6/30/2014 16:37 18.176 Y:\\Public\\Fisher Group\\DataLoggers\\WaterTemp\\DarkCanyon\\DC Trib 1A\\
5: 5 6/30/2014 17:37 18.200 Y:\\Public\\Fisher Group\\DataLoggers\\WaterTemp\\DarkCanyon\\DC Trib 1A\\
---
46230: 915 07/29/24 01:41:52 PM 11.722 Y:\\Public\\Fisher Group\\DataLoggers\\WaterTemp\\DarkCanyon\\DC Trib 1A\\
46231: 916 07/29/24 02:41:52 PM 12.401 Y:\\Public\\Fisher Group\\DataLoggers\\WaterTemp\\DarkCanyon\\DC Trib 1A\\
46232: 917 07/29/24 03:41:52 PM 13.269 Y:\\Public\\Fisher Group\\DataLoggers\\WaterTemp\\DarkCanyon\\DC Trib 1A\\
46233: 918 07/29/24 04:10:09 PM NA Y:\\Public\\Fisher Group\\DataLoggers\\WaterTemp\\DarkCanyon\\DC Trib 1A\\
46234: 919 07/29/24 04:10:12 PM NA Y:\\Public\\Fisher Group\\DataLoggers\\WaterTemp\\DarkCanyon\\DC Trib 1A\\
Obrigada, Amanda
Você precisa alterar os nomes das colunas antes de usar
rbindlist
. Além disso,idcol=
é ótimo, mas, a menos que eu esteja esquecendo de algo, o seuall_csv
não tem nome, então o idcol vai capturar o índice dentro da lista, não o nome do arquivo em si.Talvez algo assim:
Estou usando
setNames(nm=x)
como abreviação desetNames(x,nm=x)
, uma vez que a lista/vetor tem nomes,lapply
ele os mantém.Editar (leve código-golfe), motivado por Friede: