从数据框中选择特定行并将其存储到文件夹中

时间:2016-07-07 08:15:03

标签: r dataframe

我有这种形式的数据框:

if (stack->size = 0)

我想要做的是检查第一列的每一行的名称,如果它以数字开头(即:0091375),或一个字母然后一个数字(即:R290601)然后存储整行到具有相同名称的文件夹和2个子文件夹,分别具有第2行和第3行的值。例如,第一行单元格称为 TEXTILE ,因此我想跳过它。以 R290601 开头的第二行单元格将存储在我的计算机名为 R290601 的文件夹中,该文件夹将包含2个子文件夹:一个名为 001 6 和一个名为 231 。有没有人知道如何在R中做到这一点?

3 个答案:

答案 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.framedf且您的列名分别为x1x2x3x4

df[grepl("^[0-9]|^[a-zA-Z][0-9].*", df$x1), ]

其中grepl("^[0-9]|^[a-zA-Z][0-9].*", df$x1)TRUEFALSE

关于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。