我有几千个*.csv
个文件(所有文件都有一个唯一的名称),但文件中的标题 - 列相同 - 例如"Timestamp"
,"System_Name"
,{{1}等等......
我的问题是如何替换"CPU_ID"
(这是一个系统名称,如"System_Name"
或任何其他字符组合,并将其匿名化?我很感激任何提示或指向正确的方向.. 。
在CSV文件的结构下面......
"as12535.org.at"
我尝试使用R包"Timestamp","System_Name","CPU_ID","User_CPU","User_Nice_CPU","System_CPU","Idle_CPU","Busy_CPU","Wait_IO_CPU","User_Sys_Pct"
"1161025010002000","as06240.org.xyz:LZ","-1","1.83","0.00","0.56","97.28","2.72","0.33","3.26"
"1161025010002000","as06240.org.xyz:LZ","-1","1.83","0.00","0.56","97.28","2.72","0.33","3.26"
"1161025010002000","as06240.org.xyz:LZ","-1","1.83","0.00","0.56","97.28","2.72","0.33","3.26"
,它在矢量级别上运行良好,但我遇到了这样做的问题,我在R中阅读的数千个csv文件 - 我尝试的是以下内容 - 创建列表中包含所有csv文件作为数据框的列表。
anonymizer
我正在扭曲我的大脑,因为我无法对initialize a list
r.path <- setwd("mypath")
ldf <- list()
# creates the list of all the csv files in my directory - but filter for
# files with Unix in the filename for testing.
listcsv <- dir(pattern = ".UnixM.")
for (i in 1:length(listcsv)){
ldf[[i]] <- read.csv(file = listcsv[i])
}
列进行匿名化,甚至无法替换某些字符(用于伪匿名化)并循环遍历列表(System_Name
)和数据框那个列表中的元素。
我的列表ldf
(包含单个csv文件的df)如下所示:
ldf
我现在如何读取所有CSV文件,更改或匿名化summary(ldf)
Length Class Mode
[1,] 5 data.frame list
[2,] 5 data.frame list
[3,] 5 data.frame list
列的整个部分甚至部分内容,并为R中的循环中的每个目录中的每个CSV执行此操作?不需要超级优雅 - 当它完成工作时我很高兴: - )
答案 0 :(得分:2)
执行此操作的常见模式是:
df <- do.call(
rbind,
lapply(dir(pattern = "UnixM"),
read.csv, stringsAsFactors = FALSE)
)
df$System_Name <- anonymizer::anonymize(df$System_Name)
它与您尝试的不同,因为它将所有数据框绑定在一个中,然后匿名化。
当然,您可以将所有内容保存在列表中,例如@S Rivero建议。它看起来像是:
listdf <- lapply(
dir(pattern = "UnixM"),
function(filename) {
df <- read.csv(filename, stringsAsFactors = FALSE)
df$System_Name <- anonymizer::anonymize(df$System_Name)
df
}
)