Как добавить строку во фрейм данных (после преобразования) в R? - PullRequest
0 голосов
/ 09 марта 2020

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

Это то, что я пробовал:

colnames(col_freq) <- c("Symptoms", "values")
col_freq <- col_freq[order(-col_freq$values),]
top_freq <- rbind(col_freq[1:10,], c("Others", sum(col_freq[10:nrow(col_freq),2])))

Приведенный выше код однако в результате получается следующий фрейм данных с отсутствующим значением

enter image description here

Как добавить эту строку (c("Others", sum(col_freq[10:nrow(col_freq),2]))) в мой фрейм данных? Заранее спасибо.

1 Ответ

1 голос
/ 09 марта 2020

Мы можем использовать rbind с list вместо vector, так как list может иметь различные типы

rbind(col_freq[1:10,], list("Others", sum(col_freq[1:nrow(col_freq),2])))

С c, т.е. создавать vector, если есть является единственным элементом, не относящимся к нумерации c, он изменит класс всего вектора на этот тип в зависимости от приоритета для разных типов. character будет иметь больший приоритет, поэтому вывод sum будет character


В коде OP пропущенное значение будет сгенерировано, если в первом столбце будет factor. Таким образом, нам нужно преобразовать этот столбец в character или добавить новый уровень «Другие» перед выполнением rbind

col_freq$Symptoms <- as.character(col_freq$Symptoms)

Или, если он должен остаться как factor

col_freq$Symptoms <- factor(col_freq$Symptoms, levels = c(levels(col_freq$Symptoms), "Others"))

Или назначьте новый level

levels(col_freq$Symptoms) <- c(levels(col_freq$Symptoms), "Others")

Теперь мы делаем rbind

rbind(col_freq[1:10,], list("Others", sum(col_freq[1:nrow(col_freq),2])))
#   Symptoms values
#1       fat     40
#2     sleep     25
#3     irrit     21
#4       rem     19
#5      Neck     18
#6      conc     12
#7      nerv     11
#8      Pres      9
#9      slow      9
#10     Head      8
#11   Others     172

data

col_freq <- data.frame(Symptoms = c("fat", "sleep", "irrit", "rem","Neck", "conc",
    "nerv", "Pres", "slow", "Head"), values = c(40, 25, 21, 19, 18, 12, 11, 9, 9, 8))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...