如何在重复中找到常见数据?

时间:2018-06-15 00:17:24

标签: r

我有三个.csv文件,每个文件的第一列是基因识别号码(AGI:我的实验目标)。三个文件由不同的实验组成。即第一个文件250个目标,第二个~500个,第三个~2000个。

每个文件都包含已识别目标的其他信息,例如: enter image description here

我想在这三个.csv文件中识别共同目标(AGI),并创建一个新的工作表,结合常见AGI的其他细节。

如何使用R编程识别共同目标(AGI)?

1 个答案:

答案 0 :(得分:1)

我会做这样的事情

# Read in CSV files and store in list
csv_filenames <- c("file1.csv", "file2.csv", "file3.csv")
lst <- lapply(csv_filenames, read.csv)

# Return the intersect of AGI entries across all data.frames in the list
ovlp <- Reduce(intersect, lapply(lst, function(x) x$AGI))

ovlpvectorAGI个ID,存在于所有CSV文件中;然后,data.frame match来自AGI的{​​{1}}条目与ovlpdata.frame的{​​{1}}个条目,可以轻松地从单个list中提取相关条目1}}。

为了给出一个更明确的例子,让我们生成一些假数据

set.seed(2017);
lst <- list(
    data.frame(AGI = letters[1:10], value = runif(10)),
    data.frame(AGI = letters[4:13], value = runif(10)),
    data.frame(AGI = letters[8:17], value = runif(10)));

然后

ovlp <- Reduce(intersect, lapply(lst, function(x) x$AGI));
ovlp;
#[1] "h" "i" "j"

ovlp中的条目是AGI中所有三个data.frame中出现的lst条目。

另一种方法可能是来自所有merge的{​​{1}}数据,然后根据所有data.frame中条目的缺席/存在过滤行。

更新

在回复您的评论时,这里有一些可以帮助您入门。

首先,让我们根据data.frame合并的data.frame中的list值加入"AGI"中的data.frame

df

让我们来看看合并后的df <- Reduce(function(x, y) dplyr::full_join(x, y, by = "AGI"), lst);

data.frame

我们现在可以选择“完整”的行(即,包含所有三个df; # AGI value.x value.y value #1 a 0.92424261 NA NA #2 b 0.53717641 NA NA #3 c 0.46919565 NA NA #4 d 0.28862618 0.674331481 NA #5 e 0.77008816 0.002020766 NA #6 f 0.77276871 0.025093514 NA #7 g 0.03932234 0.432077786 NA #8 h 0.43490560 0.499391912 0.63411352 #9 i 0.47216639 0.388681932 0.37986744 #10 j 0.27383312 0.395375316 0.94207403 #11 k NA 0.715707325 0.75499369 #12 l NA 0.940999879 0.22761184 #13 m NA 0.827229161 0.91466603 #14 n NA NA 0.62044504 #15 o NA NA 0.31910458 #16 p NA NA 0.07628881 #17 q NA NA 0.26083932 的值),然后选择每个data.frame的平均值。

AGI