我有三个.csv文件,每个文件的第一列是基因识别号码(AGI:我的实验目标)。三个文件由不同的实验组成。即第一个文件250个目标,第二个~500个,第三个~2000个。
我想在这三个.csv文件中识别共同目标(AGI),并创建一个新的工作表,结合常见AGI的其他细节。
如何使用R编程识别共同目标(AGI)?
答案 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))
ovlp
是vector
个AGI
个ID,存在于所有CSV文件中;然后,data.frame
match
来自AGI
的{{1}}条目与ovlp
中data.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