【发布时间】:2021-11-29 11:28:03
【问题描述】:
我有一个超过一万行的 data.table,它看起来像这样:
DT1 <- data.table(ID = 1:10,
result_2010 = c("TRUE", "FALSE", "TRUE", "FALSE", "FALSE", "TRUE", "FALSE", "FALSE", "TRUE", "FALSE"),
result_2011 = c("FALSE", "TRUE", "FALSE", "FALSE", "FALSE", "FALSE", "TRUE", "FALSE", "FALSE", "TRUE"),
years = c(15, 16.5, 31, 1, 40.2, 0.3, 12, 22.7, 19, 12))
ID result_2010 result_2011 years
1: 1 TRUE FALSE 15.0
2: 2 FALSE TRUE 16.5
3: 3 TRUE FALSE 31.0
4: 4 FALSE FALSE 1.0
5: 5 FALSE FALSE 40.2
6: 6 TRUE FALSE 0.3
7: 7 FALSE TRUE 12.0
8: 8 FALSE FALSE 22.7
9: 9 TRUE FALSE 19.0
10: 10 FALSE TRUE 12.0
对于“result_2010”和“result_2011”,我想对“年”进行百分位分析,但前提是个人的值为“TRUE”。我尝试的代码似乎可以工作,但它为“result_2010”和“result_2011”返回相同的结果,这肯定是不正确的:
DT1 %>%
group_by(result_2010 == "TRUE") %>%
summarise("10.quantile"= round(quantile(years,c(.10)),digits=1),
"25.quantile"= round(quantile(years,c(.25)),digits=1),
"Median"= round(quantile(years,c(.50)),digits=1),
"75.quantile"= round(quantile(years,c(.75)),digits=1),
"90.quantile"= round(quantile(years,c(.90)),digits=1),
"Mean" = round(mean(years),digits=1))
DT1 %>%
group_by(result_2011 == "TRUE") %>%
summarise("10.quantile"= round(quantile(years,c(.10)),digits=1),
"25.quantile"= round(quantile(years,c(.25)),digits=1),
"Median"= round(quantile(years,c(.50)),digits=1),
"75.quantile"= round(quantile(years,c(.75)),digits=1),
"90.quantile"= round(quantile(years,c(.90)),digits=1),
"Mean" = round(mean(years),digits=1))
谁能帮助我更正我的代码?
【问题讨论】:
-
您可能想使用
filter而不是group_by即filter(result_2010 == "TRUE") -
您使用
"TRUE"/"FALSE"而不是更直接的TRUE/FALSE是否有特殊原因?我发现高效的处理通常始于高效的数据。 -
Gabesz,任何(所有?)答案都解决了您的问题吗?
-
我们似乎用解决方案的数量及其复杂性来压倒提问者。 Gabesh 一定害怕尝试做所有这些事情。更不用说决定给谁 15 点声望点了。他自己的问题得到了+30分:-(!PS。我再次检查了你的解决方案,当
DT1中的变量result_2010和result_2011是logical和character类型时,每次我得到错误“错误...找不到对象'值'”。
标签: r data.table percentile