-1

好的,谢谢你,我将再次开始这个问题:

这是我的df

df = read.table(text = '    replicate    size   fh
ms03a_T0_r1  397.51 1099
ms03a_T0_r1  695.46    8
ms03a_T0_r1  708.76 1409
ms03a_T0_r1 1203.98  102
ms03a_T0_r2  397.52  749
ms03a_T0_r2  493.97   23
ms03a_T0_r2  538.43   12
ms03a_T0_r3  397.49  638
ms03a_T0_r3  399.84    9
ms03a_T0_r3  404.95   33
ms03a_T0_r3  406.85   40 ', header = T)

Rn <- as.numeric(length(levels(ol$replicate)))
# just to calculate the number of samples

从这个我想有3个新的数据集,每个数据集只包含“复制”变量的*_r1值的行,带有*_r2的行和带有*_r3的行。

我想用这些命令做到这一点:

for (i in 1:Rn){

  x <- df[as.character(sub('.*_r', '', as.character(replicate))) %in% i];

  outfile <- paste("rep_",i,"_edited.txt",sep="")
  write.table(x,quote=FALSE,sep=", ",outfile)
}

但我能够在 r 中获得 .txt 输出而不是 df 对象。这样,我将不得不在 r 中再次导入它们以继续我的“脚本”的下一步,我不知道如何设置 r 以自动导入它们

4

1 回答 1

0

我的猜测是你想要这个:

df = read.table(text = '    replicate    size   fh
  ms03a_T0_r1  397.51 1099
  ms03a_T0_r1  695.46    8
  ms03a_T0_r1  708.76 1409
  ms03a_T0_r1 1203.98  102
  ms03a_T0_r2  397.52  749
  ms03a_T0_r2  493.97   23
  ms03a_T0_r2  538.43   12
  ms03a_T0_r3  397.49  638
  ms03a_T0_r3  399.84    9
 ms03a_T0_r3  404.95   33
 ms03a_T0_r3  406.85   40 ', header = T)

library(data.table)
dt = data.table(df)

special.ids = c(1,3)
dt[as.numeric(sub('.*_r', '', as.character(replicate))) %in% special.ids]
#     replicate    size   fh
#1: ms03a_T0_r1  397.51 1099
#2: ms03a_T0_r1  695.46    8
#3: ms03a_T0_r1  708.76 1409
#4: ms03a_T0_r1 1203.98  102
#5: ms03a_T0_r3  397.49  638
#6: ms03a_T0_r3  399.84    9
#7: ms03a_T0_r3  404.95   33
#8: ms03a_T0_r3  406.85   40

注意,as.character是必需的,因为read.table默认情况下会将字符串转换为因子。如果实际数据已经是字符串,则可能不需要它。

在二读时,也许你想要这个?

split(df, sub('.*_r', '', as.character(df$replicate)))

OP - 你需要解决你的问题。

于 2013-07-17T19:20:42.183 回答