我有一個包含變數子集(模型、mpg、年份等)的資料框物件。
我從中創建了一個資料框物件,該物件僅包含稱為縮減集的前 200 個觀察值。
我正在嘗試制作一個僅適用于“汽車”模型的匯總統計表,但我無法弄清楚。我參考了 vtable.pdf 但仍在苦苦掙扎。
st(reducedset, group='model', group.test=TRUE)
uj5u.com熱心網友回復:
我沒有你的資料,所以我嘗試在包中的 Auto 資料集上運行你的分析ISLR(見 Introduction to Statistical Learning, James et al., 2013)。我更換了條件model == "cars"有year == 70,但道理是一樣的。
library(ISLR)
dta = Auto # Replace this with your data!
reducedset = dta[1:200, ]
st(reducedset[reducedset$year == 70, ], group='name', group.test=TRUE) # Change the condition within square brackets!
uj5u.com熱心網友回復:
我相信你正在尋找這樣的東西。下面的函式稱為my_stats()分割的所述子集mtcars被稱為sub成的基團grouping_factor(這里:vs),然后計算mean,sd,min,和max為每個變數內sub。
# cars data
data(mtcars)
# random subset
sub <- mtcars[sample(seq_len(nrow(mtcars)), 20, replace = TRUE), ]
# function to compute the mean and sd for variables in 'df' according
# to 'grouping_factor'
my_stats <- \(df, grouping_factor){
sum_stats <- lapply(split(df, df[[grouping_factor]]), \(x) {
data.frame(sapply(x, \(i) cbind(
mean(i, na.rm = TRUE), sd(i, na.rm = TRUE),
min(i, na.rm = TRUE), max(i, na.rm = TRUE))))
})
sum_stats <- lapply(sum_stats, \(x) {
rownames(x) <- c('Mean', 'SD', 'Min', 'Max'); x
})
for(i in 1:length(sum_stats)) {
names(sum_stats)[i] <-
paste(grouping_factor, '=', levels(as.factor(df[[grouping_factor]]))[i])
}
return(sum_stats)
}
輸出(每組的前三列)
> lapply(my_stats(df = sub, grouping_factor = 'vs'), '[', 1:3)
$`vs = 0`
mpg cyl disp
Mean 16.650000 7.500000 296.3833
SD 3.234333 0.904534 99.4829
Min 10.400000 6.000000 145.0000
Max 21.000000 8.000000 460.0000
$`vs = 1`
mpg cyl disp
Mean 24.350000 4 113.21250
SD 3.000952 0 22.39256
Min 21.500000 4 79.00000
Max 30.400000 4 146.70000
如果您想查看所有輸出,只需運行my_stats(df = sub, grouping_factor = 'vs').
注意:如果您使用 R <4.1.0 的版本,請使用function(x)而不是\(x)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/409159.html
標籤:
