Почему R неправильно читает содержимое столбца в data.frame? - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть фрейм данных (sub), в котором я хочу умножить числовые значения в столбце 2 на коэффициент, который отличается в зависимости от «значения» столбца 'domain'.

данные:

sub <- structure(list(domain = c("Bacteria", "Bacteria", "Bacteria", 
"Eukaryota", "Eukaryota", "Eukaryota", "Bacteria", "Bacteria", 
"Eukaryota", "Bacteria"), `60781` = c(12471263.2580165, 0, 24942526.516033, 
9845734.15106566, 0, 19691468.3021313, 122788742566383, 0, 0, 
245577485132767), `60782` = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L), `60783` = c(2L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L), 
    `60784` = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), `60785` = c(0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), `60786` = c(5L, 1L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 6L), `60787` = c(2L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 5L), `60759` = c(3L, 0L, 0L, 0L, 
    0L, 0L, 1L, 0L, 0L, 8L), `60773` = c(1L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L), `60774` = c(0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 4L), `60775` = c(2L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 6L), `60776` = c(2L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 2L), `60777` = c(4L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    4L), `60778` = c(1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 5L), 
    `60779` = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 4L), `60780` = c(1L, 


       1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L)), .Names = c("domain", 
    "60781", "60782", "60783", "60784", "60785", "60786", "60787", 
    "60759", "60773", "60774", "60775", "60776", "60777", "60778", 
    "60779", "60780"), row.names = c(4549L, 9581L, 14048L, 17710L, 
    19822L, 17650L, 15353L, 13170L, 20622L, 157L), class = "data.frame")

Q16S <- structure(list(s = structure(c(10L, 11L, 12L, 13L, 14L, 15L, 
16L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L), .Label = c("60759", 
"60773", "60774", "60775", "60776", "60777", "60778", "60779", 
"60780", "60781", "60782", "60783", "60784", "60785", "60786", 
"60787"), class = "factor"), q = c(12471263.2580165, 9779600.35102098, 
4233335.65669403, 4233335.65669403, 5861610.84202048, 3608701.24759829, 
1911945.62045948, 5286624.33414104, 23126648.4362759, 4358019.31046983, 
8226827.34243214, 4359062.63714278, 2351302.71868581, 5938544.50162295, 
2772726.13977936, 7168230.19241166)), .Names = c("s", "q"), row.names = c(10L, 
11L, 12L, 13L, 14L, 15L, 16L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 
9L), class = "data.frame")

Q18S <- structure(list(s = structure(c(10L, 11L, 12L, 13L, 14L, 15L, 
16L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L), .Label = c("60759", 
"60773", "60774", "60775", "60776", "60777", "60778", "60779", 
"60780", "60781", "60782", "60783", "60784", "60785", "60786", 
"60787"), class = "factor"), q = c(9845734.15106566, 7720737.11922709, 
3342107.09739003, 3342107.09739003, 4627587.50685827, 2848974.66915655, 
1509430.75299433, 4173650.79011135, 18257880.3444283, 3440541.56089723, 
6494863.6913938, 3441365.23984957, 1856291.62001511, 4688324.60654444, 
2188994.32087844, 5659129.09927236)), .Names = c("s", "q"), row.names = c(10L, 
11L, 12L, 13L, 14L, 15L, 16L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 
9L), class = "data.frame")

Код:

 sub[[2]][sub$domain =="Bacteria"] <- sub[[2]]*Q16S$q[1]
  sub[[2]][sub$domain =="Eukaryota"] <- sub[[2]]*Q18S$q[1]

В конце концов я хочу сделать for loop - цикл над столбцом 11:16 и умножить различные факторы, как указано в Q16S или Q18Sв зависимости от 'domain'.

for (i in 1:16){
qdata[[10+i]][qdata$domain =="Bacteria"] <- qdata[[10+i]]*Q16S$q[i]
qdata[[10+i]][qdata$domain =="Eukaryota"] <- qdata[[10+i]]*Q18S$q[i]
}

Однако на выходе теперь находятся числа, где раньше было «0», а где было, например, «2», теперь они умножаются на миллионы ....

Я делаю получаю предупреждающее сообщение, но я не могу его интерпретировать:

Warning message:
In sub[[11]][sub$domain == "Eukaryota"] <- sub[[11]] * Q18S$q[1] :
  number of items to replace is not a multiple of replacement length

Есть какие-либо предложения относительно того, что я делаю неправильно?

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