hhh*_*hhh 1 python r list-comprehension
我想在R中这样:
fsC=[read.table(x) for x in Sys.glob('./Trial7/*.csv')]
Run Code Online (Sandbox Code Playgroud)
即尝试将每个文件的内容读取到单独的向量,其中向量属于数据结构.
蟒蛇
[file(x, 'r').read() for x in glob.glob('./Trial7/*.csv')]
Run Code Online (Sandbox Code Playgroud)
或者更好
[file(x, 'r') for x in glob.glob('./Trial7/*.csv')]
Run Code Online (Sandbox Code Playgroud)
但我认为你明白了......
你有两个问题.首先,"给定一个文件名向量,你如何将这些文件读入R?".
这是您的文件名列表
trial7_files <- Sys.glob("Trial7/*.csv")
#if you prefer to specify the names using regular expressions, try
trial7_files <- dir("Trial7", "\\.csv$")
Run Code Online (Sandbox Code Playgroud)
如前所述,lapply是阅读文件的最佳方式.
fsC <- lapply(trial7_files, read.csv)
Run Code Online (Sandbox Code Playgroud)
这会为您提供数据框列表,并引出您的下一个问题."如何将具有相同列的数据帧列表合并到一个数据帧中?"
执行此操作的标准方法是使用do.call和rbind.首先,记下每个数据集中有多少行是很有用的.
n_records <- sapply(fsC, nrow)
fsC <- do.call(rbind, fsC)
Run Code Online (Sandbox Code Playgroud)
这是你的问题解决了,虽然你可能想要一个列告诉你每行来自哪个文件.
fsC$source <- rep(trial7_files, n_records)
Run Code Online (Sandbox Code Playgroud)
使用sapply来"映射"向量:
sapply(Sys.glob('./Trial7/*.csv'), read.table) -> fsc
Run Code Online (Sandbox Code Playgroud)