如何在 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]))
) 添加到我的数据框中怎么办?
提前谢谢你。
我们可以使用 rbind
和 list
而不是 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))