#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 Я добавил небольшой пример, чтобы объяснить, что происходит в вашем коде