从特定行中具有相同值的数据框中选择行

时间:2018-02-27 22:33:44

标签: r for-loop dataframe

我有一个.tsv文件,我将其导入为data.frame:

df = read.table(file.choose(), sep = '\t', header = TRUE)

该文件由531行和80列组成。 由此,我必须在第三列中提取具有相同值的行。

所以,我试过这个:

cl <- nrow(df)
for (i in 1:cl){
  store<-df[df[i,3]==df[[3]],]
}

代码工作,它识别相等的行,但循环存在问题,因为它只存储最后一行(加上等于)。
最后,如何将每个第i行(加上等于)存储在不同的变量中? 例如,假设文件为:

  df[1:4,1:4]
  Sample Gene Variant Chr
1 48_S12 AATF GC>GC/G  17
2 48_S12 AATF   G>C/C  17
3 48_S12 AATF   G>G/A  17
4 48_S12 AATF   G>G/A  17

在这种特殊情况下,我的代码应该以相同的顺序存储行,但它只存储最后2行。另外,我希望它将前2行存储在2个不同的变量中,最后2个存储在同一个变量中(由于相等的第三列&#39; s值)。

1 个答案:

答案 0 :(得分:0)

最简单的方法是将结果数据帧存储在一个列表中,您可以在其中访问每个数据帧。

require(dplyr)
variant_types <- unique(as.character(df$Variant))

tmp <- list()

for (k in 1:length(variant_types)) {
  tmp[[k]] <- df %>% filter(Variant == variant_types[k])
}

第二个数据框将存储在tmp[[2]]中,例如:

> tmp
[[1]]
  Sample Gene Variant Chr
1 48_S12 AATF GC>GC/G  17

[[2]]
  Sample Gene Variant Chr
1 48_S12 AATF   G>C/C  17

[[3]]
  Sample Gene Variant Chr
1 48_S12 AATF   G>G/A  17
2 48_S12 AATF   G>G/A  17