목표
폴더에 100 개의 hdf5 파일이 있습니다. 재현 예를 들어의 즉 단지 2 파일을 살펴 보자 :여러 파일을 읽고 R에서 단일 파일을 만드는 방법은 무엇입니까?
는> list.files(pattern="*.hdf5")
[1] "Cars_20160601_01.hdf5" "Cars_20160601_02.hdf5"
각 HDF5 파일은 2 개 그룹, data
및 frame
이 포함되어 있습니다. data
그룹에서 2 개의 개체를 추출하고 싶습니다. 이들은 VDS_Veh_Speed
및 VDS_Chassis_CG_Position
입니다. 마찬가지로 frame
그룹에는 3 개의 개체가 있습니다. 이 그룹에는 객체 frame
만 관련됩니다.
이 파일을 읽고 위에서 설명한 관련 변수를 추출하고 싶습니다.
내가 시도하는 것 :
# Create a list all the hdf5 files
temp = list.files(pattern="*.hdf5")
# Read all files and create data frames from each using the file name as df name
for (i in unique(temp)){
data <- h5read(file = i, name = "data") # ED data
frame <- h5read(file = i, name = "frame") # Frame numbers
ED <- data.frame(frames = frame$frame,
speed.kph.ED = round(data$VDS_Veh_Speed*1.46667*0.3048*3.6,2),
pedal_pos = data$CFS_Accelerator_Pedal_Position)#fps
df <- h5read(file = i, name = "data/VDS_Chassis_CG_Position")
df <- as.data.frame(df)
colnames(df) <- c("y", "x", "z")
df$speed <- ED$speed.kph.ED
df$pedal_pos <- ED$pedal_pos
df$file.ID <- i
assign(i, df)
}
지금, 지구 환경의 모든 파일을 가지고 있기 때문에, 나는 여분의 객체를 제거하고 오직 새 DFS 유지 : 마지막으로
# Remove extra objects
rm(data, df, ED, frame, i, temp)
을, I 환경에서 dfs 목록을 만들고 단일 데이터 프레임을 만들었습니다.
DF_obj <- lapply(ls(), get)
fdc <- do.call("rbind", DF_obj)
나. 그러나 의견에서 언급 한 바와 같이 assign
은 피해야합니다. 또한 수동으로 rm()
을 사용해야하는데이 코드가 없으면이 코드가 작동하지 않습니다. 이 문맥에서 assign
을 피할 수있는 방법이 있습니까? https://1drv.ms/f/s!AsMFpkDhWcnw6g7StJp9dzZ-nCr4
'fortunes :: fortune (236)' – alistaire
@alistaire 그게 무슨 뜻입니까? –
[fortunes] (https://cran.r-project.org/web/packages/fortunes/index.html) 패키지의 인용문으로,'assign'을 피하는 것이 가장 좋습니다. – alistaire