我有这种形式的数据框:
if (stack->size = 0)
我想要做的是检查第一列的每一行的名称,如果它以数字开头(即:0091375),或一个字母然后一个数字(即:R290601)然后存储整行到具有相同名称的文件夹和2个子文件夹,分别具有第2行和第3行的值。例如,第一行单元格称为 TEXTILE ,因此我想跳过它。以 R290601 开头的第二行单元格将存储在我的计算机名为 R290601 的文件夹中,该文件夹将包含2个子文件夹:一个名为 001 6 和一个名为 231 。有没有人知道如何在R中做到这一点?
答案 0 :(得分:1)
我认为“它以数字开头”意味着这一点,即“23%(@”被接受,否则grep
需要稍微不同的正则表达式。
ind <- grep("^([A-Za-z]|)[0-9]+", df[,1])
df.filtered <- df[ind,]
write.table(df.filtered, "myfile.dat")
答案 1 :(得分:1)
这可以通过正则表达式来完成(以保留您感兴趣的行)。
例如,我假设您的data.frame
为df
且您的列名分别为x1
,x2
,x3
和x4
df[grepl("^[0-9]|^[a-zA-Z][0-9].*", df$x1), ]
其中grepl("^[0-9]|^[a-zA-Z][0-9].*", df$x1)
为TRUE
或FALSE
。
关于grepl的解释:
如果df$x1
以数字^[0-9]
开头,则为TRUE
或|
如果df$x1
以字母开头,后跟数字和^[a-zA-Z][0-9].*
之后的任何内容,则为TRUE
在任何其他情况下,grepl
都会产生FALSE
一旦你完成了data.frame
循环,并将每一行保存在你想要的路径上。
保存路径
我在这里假设您要创建文件夹路径,然后将信息存储在。
中pth <- "C:/Users/dimitris_ps/Desktop/"
# Iteratate within each row of df
for(i in 1:nrow(df)){
# Create 1st path
dir.create(paste0(pth , df$x1[i]))
# Create 2nd and 3rd paths
dir.create(paste0(pth , df$x1[i], "/", paste0(df$x2[i], df$x3[i])))
dir.create(paste0(pth , df$x1[i], "/",df$x4[i]))
# write data.frame row as txt
write.table(df[i, ], file=paste0(pth, df$x1[i], "/", df$x1[i],".txt"), sep=";")
}
答案 2 :(得分:0)
这是获取您想要的行的技巧:
test <- "TEXTILE" #Aka df[1,1]
!(is.na(as.numeric(substr(test,1,1)))&&is.na(as.numeric(substr(test,2,2))))
这给我们带来了麻烦。和其他案件一起:
test <- "R02787" #Aka df[i,1]
test <- "022449" #Aka df[i+1,1]
这将使我们为TRUE,因此您可以通过循环一些apply来选择行,并检查iff条件是TRUE还是FALSE。