我有一个 data.table,在字符串列中存储异构文件名。 我想从该列中提取扩展名,始终采用最后一个点出现后的字符。有时文件名可能包含更多点。
我尝试过:
files0=data.table(filename=c("simple_file.csv","file with.two dots.xls"))
files0[,chunks:=length(tstrsplit(filename,"\\."))]
files0[,extension:=tstrsplit(filename,"\\.")[chunks]]
如何确保
tstrsplit
仅应用于每一行,以便此方法有效?
PS:我还设法生成一个列,用
str_count
存储正确数量的文本“块”,但问题仍然是,当我想创建“扩展名”列时,整个“文件名”列似乎是用于每一行。
您可以通过使用
sapply()
对每个文件名和拆分文件名应用 strsplit(filename, "\\.", fixed = TRUE)
函数,然后使用 tail(1)
提取每个拆分的最后一个元素,现在使用 sub()
删除点之前的所有内容
files0[, extension := sub("\\..*$", "", sapply(strsplit(filename, "\\.", fixed = TRUE), tail, 1))]