Ошибка при подстановке кадра данных по строкам - PullRequest
0 голосов
/ 10 мая 2018

У меня есть фрейм данных со 120 наблюдениями и 10 переменными.У меня есть одна строка кода для его поднабора, чтобы извлечь только некоторые конкретные строки

  df_reduc_expr <- which(df$Speciestreat != 'Bac + Junc')
  df_reduc <- df[df_reduc_expr,]

Он работал, пока не остановился и не начал выдавать ошибку

Error: Column indexes must be at most 1 if positive, not 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105

Если я поставлю несколько чиселпосле запятой, как будто я также просил подмножество столбцов, ошибка прекращается.Но пока я оставляю выражение для извлечения всех столбцов, оно, похоже, путается со строками и выдает ошибку.

Я даже не знаю, с чего начать искать причину такого поведения.

Версии:

  • Матричный пакет 1.2-14.Единственное, что я думаю, может быть возмущение, это то, что мне пришлось установить его вручную (используя RStudio и .tar.gz), потому что моя версия использовала 1.2-6, и мне нужна была более новая версия для другой части скрипта.Я не знаю, может ли это повлиять.
  • RStudio 1.0.136

Есть идеи?

1 Ответ

0 голосов
/ 10 мая 2018

Перезапуск R не сработал. Но я добрался до вопроса, хотя до сих пор не понимаю, что происходит.

Проблема была в исходном кадре данных df. В предыдущей строке я создал новый столбец и назначил некоторое значение, используя

df$notransf <- df[, var]

Очевидно, что что-то изменилось в кадре данных, и это не сработало.

Я изменил его на

df["notransf"] <- df[, var]

И это вернулось к нормальному поведению.

Просто для образовательных целей, вы знаете, почему это могло произойти?

Редактировать 1. Дополнительные данные

Извините, что не включил это в начало. Фрейм данных выглядит следующим образом

Salinity Immersion Speciestreat Species Repetition   Box Soil    `Mean Aboveground length (mm)` Salinity_num Immersion_num Repetition_F notransf
   <fct>    <fct>     <ord>        <chr>        <dbl> <dbl> <fct>                            <dbl>        <dbl>         <dbl> <fct>           <dbl>
 1 5        0         Bac + Junc   Juncus          1.    2. invaded                          10.4            5.            0. 1               10.4 
 2 5        0         Bac + Junc   Juncus          2.    4. invaded                           6.49           5.            0. 2                6.49
 3 5        0         Bac + Junc   Juncus          3.    6. invaded                          NA              5.            0. 3               NA   
 4 5        0         Bac + Junc   Juncus          4.    8. invaded                           6.21           5.            0. 4                6.21
 5 5        0         Bac + Junc   Juncus          5.   10. invaded                           3.92           5.            0. 5                3.92
 6 5        20        Bac + Junc   Juncus          1.    2. invaded                           6.74           5.           20. 1                6.74
 7 5        20        Bac + Junc   Juncus          2.    4. invaded                           7.10           5.           20. 2                7.10
 8 5        20        Bac + Junc   Juncus          3.    6. invaded                          14.7            5.           20. 3               14.7 
 9 5        20        Bac + Junc   Juncus          4.    8. invaded                           9.77           5.           20. 4                9.77
10 5        20        Bac + Junc   Juncus          5.   10. invaded                           5.77           5.           20. 5                5.77


Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   180 obs. of  12 variables:
 $ Salinity                    : Factor w/ 3 levels "0","5","18": 2 2 2 2 2 2 2 2 2 2 ...
 $ Immersion                   : Factor w/ 3 levels "0","20","40": 1 1 1 1 1 2 2 2 2 2 ...
 $ Speciestreat                : Ord.factor w/ 2 levels "Bac + Junc"<"Juncus": 1 1 1 1 1 1 1 1 1 1 ...
 $ Species                     : chr  "Juncus" "Juncus" "Juncus" "Juncus" ...
 $ Repetition                  : num  1 2 3 4 5 1 2 3 4 5 ...
 $ Box                         : num  2 4 6 8 10 2 4 6 8 10 ...
 $ Soil                        : Factor w/ 2 levels "invaded","recovered": 1 1 1 1 1 1 1 1 1 1 ...
 $ Mean Aboveground length (mm): num  10.36 6.49 NA 6.21 3.92 ...
 $ Salinity_num                : num  5 5 5 5 5 5 5 5 5 5 ...
 $ Immersion_num               : num  0 0 0 0 0 20 20 20 20 20 ...
 $ Repetition_F                : Factor w/ 10 levels "1","2","3","4",..: 1 2 3 4 5 1 2 3 4 5 ...
 $ notransf                    : num  10.36 6.49 NA 6.21 3.92 ...

И var - это строковая переменная, для этого случая

var = "Mean Aboveground length (mm)"

Изначально я хотел удалить строки со значением Bac + Junc в столбце Speciestreat.

Использование переменной var связано с тем, что далее в коде мне нужно ссылаться на данные для работы, которые иногда находятся в одном столбце, а иногда в другом, поэтому я определяю переменную var с именем столбец, который нужно проанализировать, а в остальном коде просто обратитесь к столбцу «notransf», зная, что в нем есть данные, которые мне нужны в данном конкретном случае.

Если вам нужно больше деталей, дайте мне знать.

...