0

我有一个数百万行长的数据文件,其中包含来自许多组的信息。下面是一个简短的部分:

MARKER      GROUP1_A1   GROUP1_A2   GROUP1_FREQ GROUP1_N    GROUP2_A1   GROUP2_A2   GROUP2_FREQ GROUP2_N
rs10    A   C   0.055   1232    A   C   0.055   3221
rs1000  A   G   0.208   1232    A   G   0.208   3221
rs10000 G   C   0.134   1232    C   G   0.8624  3221
rs10001 C   A   0.229   1232    A   C   0.775   3221

我想创建频率 (FREQ) 变量的加权平均值(它本身很简单),但是在这种情况下,某些行不匹配(第 3 行和第 4 行)。如果字母没有对齐,则在计算该标记的加权平均值之前,需要将第二组的频率减去 1。

我想设置一个简单的 IF 语句,但我不确定这样一个任务的语法。

任何见解或方向表示赞赏!

4

1 回答 1

1

假设您已在名为 mydata 的数据框中读取数据。然后执行以下操作:

mydata$GROUP2_FREQ <- mydata$GROUP2_FREQ - (mydata$GROUP1_A1 != mydata$GROUP2_A1)

它之所以有效,是因为 R 将 TRUE 值视为 1,将 FALSE 值视为 0。

编辑:尝试以下操作:

mydata$GROUP2_FREQ <- abs( (as.character(mydata$GROUP1_A1) != 
                            as.character(mydata$GROUP2_A1)) -                   
                          as.numeric(mydata$GROUP2_FREQ) )
于 2012-07-27T19:48:28.457 回答