我有一个像这样的数据框
data.frame(age=c("(0,5]", "(5,10]", "(10,15]", "(15,20]", "(20,25]", "(25,30]"),
C1=c(0, 0, 0, 0, 0, 0),
C2=c(0, 0, 0, 0, 0, 0),
C3=c(0, 270, 30, 4, 0, 0),
C4=c(0, 30, 30, 4, 0, 0))
只是以C开头的列是+50。我将使用https://stackoverflow.com/a/10139458/792066创建一个带有C列的帕累托图表,但是大量的标签使图表变得毫无价值。通常的解决方案是创建一个名为“others”的新列,其中的列不是前5~10。我想我正在寻找summarize()
对具有分类变量的因子列的作用。如果所有列的总和不在顶部X的范围内,如何将所有列汇总到新列?
答案 0 :(得分:0)
以下是使用colSums
和rowSums
的基本R方法:
df <- data.frame(age = c("(0,5]", "(5,10]", "(10,15]", "(15,20]", "(20,25]", "(25,30]"),
C1 = c(0, 0, 0, 0, 0, 0),
C2 = c(0, 0, 0, 0, 0, 0),
C3 = c(0, 270, 30, 4, 0, 0),
C4 = c(0, 30, 30, 4, 0, 0))
others <- names(sort(-colSums(df[-1]))[-1:-2])
df$others <- rowSums(df[others])
df_lumped <- df[!names(df) %in% others]
df_lumped
#> age C3 C4 others
#> 1 (0,5] 0 0 0
#> 2 (5,10] 270 30 0
#> 3 (10,15] 30 30 0
#> 4 (15,20] 4 4 0
#> 5 (20,25] 0 0 0
#> 6 (25,30] 0 0 0
您需要根据要保留的列数调整[-1:-2]
。例如,[-1:-5]
将保持前5名。