Hãy thử colMeans
:
Nhưng cột phải là số. Bạn có thể thêm một thử nghiệm cho nó cho các tập dữ liệu lớn hơn.
colMeans(iris[sapply(iris, is.numeric)])
Sepal.Length Sepal.Width Petal.Length Petal.Width
5.843333 3.057333 3.758000 1.199333
Benchmark
vẻ dài cho dplyr
và data.table
. Có lẽ ai đó có thể tái tạo các kết quả cho tính xác thực.
microbenchmark(
plafort = colMeans(big.df[sapply(big.df, is.numeric)]),
Carlos = colMeans(Filter(is.numeric, big.df)),
Cdtable = big.dt[, lapply(.SD, mean)],
Cdplyr = big.df %>% summarise_each(funs(mean))
)
#Unit: milliseconds
# expr min lq mean median uq max
# plafort 9.862934 10.506778 12.07027 10.699616 11.16404 31.23927
# Carlos 9.215143 9.557987 11.30063 9.843197 10.21821 65.21379
# Cdtable 57.157250 64.866996 78.72452 67.633433 87.52451 264.60453
# Cdplyr 62.933293 67.853312 81.77382 71.296555 91.44994 182.36578
liệu
m <- matrix(1:1e6, 1000)
m2 <- matrix(rep('a', 1000), ncol=1)
big.df <- as.data.frame(cbind(m2, m), stringsAsFactors=F)
big.df[,-1] <- lapply(big.df[,-1], as.numeric)
big.dt <- as.data.table(big.df)
Nguồn
2015-06-19 15:12:24
Cách dùng 'colMeans (iris [, 1: 4])'. Lấy giá trị trung bình của data.frame đã không được chấp nhận. Tôi không chắc chắn lý do tại sao bạn mong đợi rằng để làm việc khi bạn đã biết về các giải pháp 'sapply/lapply'. – MrFlick
Sử dụng '? ColMeans' hoặc phương pháp' áp dụng' nhưng có thể cho câu hỏi như vậy, tốt nhất là tìm kiếm stackoverflow. – SabDeM