我有一个与这里的链接类似的问题(如何计算满足R中特定条件的每列中的行数),但是我似乎无法使用相同的解决方案,因此我再次伸出援手。
我有一个数据集
mydata <- read.table(header=TRUE, text="
rime point sound school
50 80 50 es
80 80 20 es
5 90 80 es
0 10 80 ms
50 80 50 ms
80 80 20 ms
5 90 80 hs
0 10 80 hs
5 90 80 hs
0 10 80 hs
")
对于每一列,我想知道学校所观察到的百分比> = 50%。最终产品应该是一个看起来像这样的数据框。
mydata_clean <- read.table(header=TRUE, text="
rime point sound school
66.7% 100% 66.7% es
66.7% 66.7% 66.7% ms
0% 50% 100% hs
")
这似乎是一个显而易见的案例,group_by(School)
然后进行总结,但是我没有得到所需的信息。
我尝试了以下代码:
mydata %>%
group_by(school) %>%
summarise_at(vars(rime, point, sound), sum)
但这只给了我每一列的总和,这不是我想要的。
有任何想法吗?
试试这个tidyverse
方法。您可以通过pivot_longer()
保持学校变量来将数据重塑为长时间。之后,创建一个变量以检查值是否达到所需条件。最后,您summarise()
可以使用来计算期望值,这些期望值被格式化为百分比paste0()
。提醒一下,列是字符类型。这里的代码:
library(tidyverse)
#Code
mydata %>% pivot_longer(-school) %>%
group_by(school,name) %>%
mutate(Var=ifelse(value>=50,1,0)) %>%
summarise(Perc=paste0(100*round(mean(Var),3),'%')) %>%
pivot_wider(names_from = name,values_from=Perc)
输出:
# A tibble: 3 x 4
# Groups: school [3]
school point rime sound
<fct> <chr> <chr> <chr>
1 es 100% 66.7% 66.7%
2 hs 50% 0% 100%
3 ms 66.7% 66.7% 66.7%
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句