英文:
Getting the quantile result right in a summary function
问题
以下是你要的翻译部分:
我有这些数据
```R
dput(per_stack[1:4,])
它产生了以下输出:
结构(list(articles_ponderats2_migpunts = c(20.2083333333333,
20.6666666666667, 23.8333333333333, 15.1666666666667), Tramspoblacio = structure(c(5L,
4L, 4L, 4L), .Label = c("1 - 999", "1000 - 4999", "5000 - 9999",
"10000 - 19999", "20000 - 49999", "50000 - 99999", "100000 - 200000",
"Mayor de 200000"), class = "factor")), row.names = c(NA, 4L), class = "data.frame")
我已经创建了一个自定义函数来进行汇总
funcio_resum <- function(x) {
n <- NROW(x)
mean <- mean(x)
median <- median(x)
min <- min(x)
max <- max(x)
q1 <- quantile(x, 0.25)
q3 <- quantile(x, 0.75)
SD <- sd(x)
IQR <- IQR(x)
quantile <- quantile(x, probs = seq(0.1, 0.9, by = 0.1))
hist <- hist(x)
summary <- list(n = n, mean = mean, median = median, max = max, min = min, q1 = q1, q3 = q3, SD = SD, IQR = IQR)
return(summary)
}
然后我应用它,然后将其转换为表格
resum <- tapply(index_articles_migpunts$articles_ponderats2_migpunts, index_articles_migpunts$Tramspoblacio, funcio_resum)
resum <- do.call(rbind, resum)
它可以正常工作,我得到了我想要的汇总表格,但是q1和q3列中的结果是这样的向量
q1
c(`25%` = 5)
c(`25%` = 11.4375)
而不是像平均值、中位数等一样简单显示结果。
q1
5
11.4375
我该如何改变这个?对于其他函数,它可以正常工作(平均值、最小值、最大值等),但对于q1和q3却不行...
我认为我可能需要更改函数的列表参数或者可能在do.call部分进行更改,但我不知道如何做...
谢谢!!
<details>
<summary>英文:</summary>
I have this data
dput(per_stack[1:4,])
which gives this output:
structure(list(articles_ponderats2_migpunts = c(20.2083333333333,
20.6666666666667, 23.8333333333333, 15.1666666666667), Tramspoblacio = structure(c(5L,
4L, 4L, 4L), .Label = c("1 - 999", "1000 - 4999", "5000 - 9999",
"10000 - 19999", "20000 - 49999", "50000 - 99999", "100000 - 200000",
"Mayor de 200000"), class = "factor")), row.names = c(NA, 4L), class = "data.frame")
I have created a custom-made function for doing the summary
funcio_resum <-function(x) {
n<-NROW(x)
mean<-mean(x)
median <- median (x)
min<-min (x)
max<-max(x)
q1 <- quantile(x, .25)
q3 <- quantile(x, .75)
SD<- sd(x)
IQR <- IQR(x)
quantile <- quantile(x, probs=seq(.1,.9, by =.1))
hist<-hist(x)
summary<-list(n=n,mean=mean, median = median, max=max,min=min, q1 = q1, q3 = q3, SD=SD, IQR = IQR)
return(summary)
}
Then I apply it and afterwards transform it to a table
resum <- tapply(index_articles_migpunts$articles_ponderats2_migpunts, index_articles_migpunts$Tramspoblacio, funcio_resum)
resum <- do.call (rbind, resum)
It works and I get the summary table I'm searching for, but the result in the q1 and q3 columns is a vector like this
q1
c(25%
= 5)
c(25%
= 11.4375)
Instead of simply showing the result as it does with mean, median, etc.
q1
5
11.4375
How can I change this? With the other functions it works fine (mean, min, max, etc.) but with q1 and q3 it does not...
I think I may have to change something in the list parameter of the function or maybe in the do.call part, but I do not know how to do it...
Thank you!!
</details>
# 答案1
**得分**: 1
以下是要翻译的内容:
你现在看到的是一个命名向量。要去掉这些名称,你可以在你的函数中使用以下代码:
q1 <- unname(quantile(x, .25))
q3 <- unname(quantile(x, .75))
<details>
<summary>英文:</summary>
What you are seeing is a named vector. To get rid of the names you can use
q1 <- unname(quantile(x, .25))
q3 <- unname(quantile(x, .75))
in your function.
</details>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论