我的数据集由鲸鱼调用组成。我有两个变量:nclicks和百分比。 nclicks是指呼叫中的点击次数(范围从3到30)。百分比是指在给定年份中进行此类呼叫的频率。我想总结更长调用的百分比(点击次数超过11次),并在数据框中添加一个新行,其中nclicks为11+,百分比的总和百分比。然后我想删除构成新行的行。
我已经尝试将“nclicks”编码为因子和数字。我已经使用了aggregate,rowSums,rbind等的组合,但没有运气。我最接近的是获得一个具有总和百分比的新行,但我必须指定手动包含哪些行(参见下面的示例)。这个方法也总结了nclicks值(所以在下面的例子中,我在nclicks中得到一个新的行,其中43(11 + 12 + 20)和20%的行,当我真的想要行号为4时,nclicks为11 +,百分比为20)。
nclicks=c(3,4,5,11,12,20)
percent=c(30,30,20,10,5,5)
df=data.frame(cbind(nclicks,percent))
df["11+",]=df["4",]+df["5",]+df["6",]
df=df[-c(4,5,6), ]
df
这就是我最终的结果:
nclicks percent
1 3 30
2 4 30
3 5 20
11+ 43 20
我想总结nclicks值> 10的行的百分比,但是我在执行它时遇到了麻烦。我不想单独指定要包含哪些nclicks值,因为有些年份有许多不同的nclick值> 10,而有些年份只有几个不同的值> 10。
您可以创建一个group
列来帮助聚合nclicks>=11
所在的行。
library("tidyverse")
nclicks <- c(3, 4, 5, 11, 12, 20)
percent <- c(30, 30, 20, 10, 5, 5)
df <- tibble(nclicks, percent)
df <- df %>%
mutate(group = ifelse(nclicks >= 11, "11+", nclicks)) %>%
group_by(group) %>%
summarise_at(vars(nclicks, percent), sum)
df
#> # A tibble: 4 x 3
#> group nclicks percent
#> <chr> <dbl> <dbl>
#> 1 11+ 43 20
#> 2 3 3 30
#> 3 4 4 30
#> 4 5 5 20
由reprex package创建于2019-03-31(v0.2.1)