我的向量在数据帧中
c("E:\\\\My Network Places.old.dat", "E:\\\\pagefile.sys", "E:\\\\Press_Dly_Diff_G_91.rbc",
"E:\\\\TV_Press_Dly_Diff_A\\Retrospect\\Dantz", "E:\\\\TV_Press_Dly_Diff_A\\Retrospect\\TV_Press_Dly_Diff_A\\1-TV_Press_Dly_Diff_A\\AA000083.rdb",
"E:\\\\TV_Press_Dly_Diff_A\\Retrospect\\TV_Press_Dly_Diff_A\\1-TV_Press_Dly_Diff_A\\AA000561.rdb"
)
在上面,文件路径的长度从1到5不等。我正在尝试将文件路径的每个级别放入数据框中的一列。我使用以下方法尝试了第一部分:
library(stringr)
df1$PF <- strsplit(df1$File.Name, "\\\\"))
df1$PFolder <- df1$PF[[1]][3]
但是我只得到数据帧中所有行的第一个My Network Places.old.dat
。如何基于\\
分隔符将路径分为多列,并将其保存到数据框中的单独列中。所需的输出如下所示:
File.Name FilePath1 FilePath2 FilePath3
以上字符向量在数据帧的File.Name
中。
我们可以使用cSplit
中的splitstackshape
splitstackshape::cSplit(df, "path", "\\\\+", fixed = FALSE)
# path_1 path_2 path_3 path_4 path_5 path_6
#1: E: My Network Places.old.dat <NA> <NA> <NA> <NA>
#2: E: pagefile.sys <NA> <NA> <NA> <NA>
#3: E: Press_Dly_Diff_G_91.rbc <NA> <NA> <NA> <NA>
#4: E: TV_Press_Dly_Diff_A Retrospect Dantz <NA> <NA>
#5: E: TV_Press_Dly_Diff_A Retrospect TV_Press_Dly_Diff_A 1-TV_Press_Dly_Diff_A AA000083.rdb
#6: E: TV_Press_Dly_Diff_A Retrospect TV_Press_Dly_Diff_A 1-TV_Press_Dly_Diff_A AA000561.rdb
或者,如果您已经知道数据将扩展到多少列,我们也可以使用separate
。
tidyr::separate(df, path, into = paste0('path', 1:6), sep = "\\\\+", fill = 'right')
数据
df <- data.frame(path = x, stringsAsFactors = FALSE)
使用分隔符导入-"\"
:
library(data.table)
fread("
E:\\\\My Network Places.old.dat
E:\\\\pagefile.sys
E:\\\\Press_Dly_Diff_G_91.rbc
E:\\\\TV_Press_Dly_Diff_A\\Retrospect\\Dantz
E:\\\\TV_Press_Dly_Diff_A\\Retrospect\\TV_Press_Dly_Diff_A\\1-TV_Press_Dly_Diff_A\\AA000083.rdb
E:\\\\TV_Press_Dly_Diff_A\\Retrospect\\TV_Press_Dly_Diff_A\\1-TV_Press_Dly_Diff_A\\AA000561.rdb",
sep = "\\", fill = TRUE, na.strings = "")
# V1 V2 V3 V4 V5 V6 V7
# 1: E: NA My Network Places.old.dat <NA> <NA> <NA> <NA>
# 2: E: NA pagefile.sys <NA> <NA> <NA> <NA>
# 3: E: NA Press_Dly_Diff_G_91.rbc <NA> <NA> <NA> <NA>
# 4: E: NA TV_Press_Dly_Diff_A Retrospect Dantz <NA> <NA>
# 5: E: NA TV_Press_Dly_Diff_A Retrospect TV_Press_Dly_Diff_A 1-TV_Press_Dly_Diff_A AA000083.rdb
# 6: E: NA TV_Press_Dly_Diff_A Retrospect TV_Press_Dly_Diff_A 1-TV_Press_Dly_Diff_A AA000561.rdb
这里是使用strsplit
的基本R解,>
res <- data.frame(do.call(rbind,lapply(s <- strsplit(v,split = "\\\\+"),`length<-`,max(lengths(s)))))
诸如此类
> res X1 X2 X3 X4 X5 X6 1 E: My Network Places.old.dat <NA> <NA> <NA> <NA> 2 E: pagefile.sys <NA> <NA> <NA> <NA> 3 E: Press_Dly_Diff_G_91.rbc <NA> <NA> <NA> <NA> 4 E: TV_Press_Dly_Diff_A Retrospect Dantz <NA> <NA> 5 E: TV_Press_Dly_Diff_A Retrospect TV_Press_Dly_Diff_A 1-TV_Press_Dly_Diff_A AA000083.rdb 6 E: TV_Press_Dly_Diff_A Retrospect TV_Press_Dly_Diff_A 1-TV_Press_Dly_Diff_A AA000561.rdb
DATA
v <- c("E:\\\\My Network Places.old.dat", "E:\\\\pagefile.sys", "E:\\\\Press_Dly_Diff_G_91.rbc",
"E:\\\\TV_Press_Dly_Diff_A\\Retrospect\\Dantz", "E:\\\\TV_Press_Dly_Diff_A\\Retrospect\\TV_Press_Dly_Diff_A\\1-TV_Press_Dly_Diff_A\\AA000083.rdb",
"E:\\\\TV_Press_Dly_Diff_A\\Retrospect\\TV_Press_Dly_Diff_A\\1-TV_Press_Dly_Diff_A\\AA000561.rdb"
)