Создание нового столбца в R с помощью 3 существующих столбцов - PullRequest
0 голосов
/ 12 мая 2011

Хотите создать новый столбец "non_coded", используя существующие 3 столбца - allele_2, allele_1 и A1

условия, которые я хочу выполнить:

if allele_2 == A1 then non_coded = allele_1 

if allele_2 != A1 then non_coded = allele_2

Заранее спасибо,

Rad

ОК. Вот как выглядят данные:

SNPID          chrom STRAND IMPUTED allele_2 allele_1     MAF CALL_RATE HET_RATE
1  rs1000000    12      +       Y        A        G 0.12160   1.00000   0.2146
2 rs10000009     4      +       Y        G        A 0.07888   0.99762   0.1386

     HWP    RSQ  PHYS_POS A1 M1_FRQ M1_INFO M1_BETA  M1_SE    M1_P
1 1.0000 0.9817 125456933  A 0.1173  0.9452 -0.0113 0.0528 0.83090
2 0.1164 0.8354  71083542  A 0.9048  0.9017 -0.0097 0.0593 0.87000

Код, который я пробовал:

Hy_MVA$non_coded <- ifelse(Hy_MVA$allele_2 == Hy_MVA$A1, Hy_MVA$allele_1, Hy_MVA$allele_2)

результат:

 SNPID       chrom STRAND IMPUTED allele_2 allele_1     MAF CALL_RATE HET_RATE
1  rs1000000    12    +       Y        A        G 0.12160   1.00000   0.2146
2 rs10000009     4    +       Y        G        A 0.07888   0.99762   0.1386

     HWP    RSQ  PHYS_POS A1 M1_FRQ M1_INFO M1_BETA  M1_SE    M1_P non_coded
1 1.0000 0.9817 125456933  A 0.1173  0.9452 -0.0113 0.0528 0.83090         3
2 0.1164 0.8354  71083542  A 0.9048  0.9017 -0.0097 0.0593 0.87000         3

Что я хочу:

SNPID        chrom STRAND IMPUTED allele_2 allele_1     MAF CALL_RATE HET_RATE
1  rs1000000    12    +       Y        A        G 0.12160   1.00000   0.2146
2 rs10000009     4    +       Y        G        A 0.07888   0.99762   0.1386

     HWP    RSQ  PHYS_POS A1 M1_FRQ M1_INFO M1_BETA  M1_SE    M1_P non_coded
1 1.0000 0.9817 125456933  A 0.1173  0.9452 -0.0113 0.0528 0.83090         G
2 0.1164 0.8354  71083542  A 0.9048  0.9017 -0.0097 0.0593 0.87000         G

Ответы [ 2 ]

2 голосов
/ 12 мая 2011

Как сказал Чейз, используйте ifelse().Я полагаю, что код становится следующим:

non_coded <- ifelse(allele_2 == A1, allele_1, allele_2)

Редактировать

После просмотра обновленного вопроса имеет смысл получить числа, потому что allele_1 и allele_2 являются факторами.Добавление as.character() должно исправить это:

A1 <- c("A","A","B")
allele_1 <- as.factor(c("A","C","C"))
allele_2 <- as.factor(c("A","B","B"))

non_coded <- ifelse(allele_2 == A1, as.character(allele_1), as.character(allele_2))
non_coded 
[1] "A" "B" "C"
1 голос
/ 12 мая 2011

Так как вы хотите, чтобы non_coded было одним из двух значений:

Hy_MVA$non_coded <- Hy_MVA$allele_2
Hy_MVA$non_coded[Hy_MVA$allele_2 == Hy_MVA$A1] <- Hy_MVA$allele_1[Hy_MVA$allele_2 == Hy_MVA$A1]

Это заменяет значения значениями allele_1 только в тех строках, где allele_2 == A1.Похоже, у вас могут возникнуть проблемы с преобразованием коэффициента ifelse в числовое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...