如何在 R 中向数据框(转换后)添加一行?

How to add a row to data frame (after conversion) in R?

我试图在订购后向我的数据框添加一行,但我一直 运行 遇到问题。

这是我试过的:

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])))

然而,上面的代码导致以下数据框缺少值

如果将这一行 (c("Others", sum(col_freq[10:nrow(col_freq),2]))) 添加到我的数据框中怎么办? 提前谢谢你。

我们可以使用 rbindlist 而不是 vector 因为 list 可以有不同的类型

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

c,即创建一个vector,如果有一个非数字元素,它会根据不同类型的优先顺序。 character 将具有更高的优先级,因此 sum 输出将是 character


在 OP 的代码中,如果第一列是 factor,则会生成缺失值。因此,我们需要在执行 rbind

之前将该列转换为 character 或添加新级别 'Others'
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

数据

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))