根据行名更改列中的值
所以我有一个大文件看起来像这样:
ID SNP A1 A2 104 sr_1 AG 104 sr_2 CC 104 sr_3 CA 105 sr_1 AA 105 sr_2 CG 105 sr_3 CC 106 sr_1 AA 106 sr_2 CC 106 sr_3 CC . . . . . . . . . . . .
我想要做的是将sr_1匹配行中的所有“G”都改为“A”,这样,如果在任何sr_1行中有A2列中的G,则可以通过A来更改它。
所以结果会是:
ID SNP A1 A2 104 sr_1 AA 104 sr_2 CC 104 sr_3 CA 105 sr_1 AA 105 sr_2 CG 105 sr_3 CC 106 sr_1 AA 106 sr_2 CC 106 sr_3 CC . . . . . . . . . . . .
我有许多行sr_1不正确的A2值。 我有一些在EXCEL / libreoffice VLOOKUP选项和一些函数转置在R表,但我找不到一个好的解决scheme…
任何帮助?
在基地R你可以使用简单的子集规则[
:
#subset A2 where snp is sr_1 and A2 is G/ Then replace A2 by A df$A2[df$SNP == 'sr_1' & df$A2 == 'G'] <- 'A' df # ID SNP A1 A2 #1 104 sr_1 AA #2 104 sr_2 CC #3 104 sr_3 CA #4 105 sr_1 AA #5 105 sr_2 CG #6 105 sr_3 CC #7 106 sr_1 AA #8 106 sr_2 CC #9 106 sr_3 CC
如果您正在使用Excel,请在A2旁边的新列中尝试使用以下公式并填写:
=IF(AND(B2="sr_1",D2="G"),"A",D2)
如果SNP列是sr_1,A2列是G,则返回A,否则返回A2。 然后将填满的列值复制到A2列上进行更新
在第2行开始的空列中试试这个公式
=if(and(B2="sr_1",D2="G"),"A",D2)
复制下来。 然后复制结果并粘贴为列D上的值
你可以使用sqldf
包,并使用sql中的update
如下所示:
require(sqldf) sql1 <- fn$identity("UPDATE df SET A2 = 'A' WHERE A2 = 'G' AND SNP = 'sr_1'") sql2 <- "select * from df" sqldf(c(sql1, sql2))
你没有指定你想如何accmplush。 它是通过一个公式? 或者通过macros代码?