Ошибка подсчета записей, отличных от NA, в фрейме данных

#r #dataframe

#r #фрейм данных

Вопрос:

Я пытаюсь выяснить, коррелирует ли объем информации, который у меня есть о случае, с продолжительностью пользователя.

В настоящее время у меня есть dataframe, df, и я попытался выполнить следующее:

 df["amount_known"] <-df[rowSums(!is.na(df)),]
  

Это привело к следующей ошибке:

Ошибка в [<-.data.frame ( *tmp* , «amount_known», value = list(status = c(3L, : элемент замены 1 содержит 808047 строк, требуется 808247

Что может привести к этому (и, конечно, как мне это исправить)?

Комментарии:

1. Я думаю, вы просто ищете это df["amount_known"] = rowSums(!is.na(df))

2. @Vlo (вы правы) итак, что я делал?

3. @soandos вы выбираете некоторые строки из своего df и присваиваете их df. df["amount_known"] <- df[1:nrow(df) 1,] это приведет к воспроизведению ошибки.

4. Вы заменяете свой df некоторыми индексами, которые представляют собой сумму not NA в каждой из строк, а затем присваиваете этот подмножество dataframe обратно в исходный dataframe в виде столбца (что полностью допустимо синтаксически, поскольку R довольно свободно / гибко с точки зрения синтаксиса, но логически не имеет особого смысладля меня). Я предполагаю, что ошибка возникает из-за того, что некоторые строки возвращают rowSums, равные 0, что означает, что индексация этой конкретной строки отсутствует. R выходит из строя, потому что общая длина замены не является целым числом, кратным длине вашего столбца (что необходимо для вставки df в столбец)

Ответ №1:

Если вам нужно количество записей, отличных от NA, в новом столбце amount_known , df вы можете сделать это следующим образом:

 df$amount_known <-rowSums(!is.na(df))
  

Вот небольшой пример того, что происходит:

 df <- data.frame(x = 1:3, y = 66:68)
df$y[1] <- NA
df$x[3] <- NA

df
#   x  y
#1  1 NA
#2  2 67
#3 NA 68

rowSums(!is.na(df))
#[1] 1 2 1
  

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

Теперь, если вы сделаете

 df[rowSums(!is.na(df)),]
  

Это позволит выбрать строки в векторе c(1,2,1) из df:

 #    x  y
#1   1 NA
#2   2 67
#1.1 1 NA
  

Так, например, строка 1 отображается дважды.

И в вашем коде вы затем присваивали этот вывод новому столбцу в df .

Комментарии:

1. @soandos Я добавил небольшой пример, чтобы объяснить, что происходит в вашем коде