У меня есть фрейм данных (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
Есть какие-либо предложения относительно того, что я делаю неправильно?