一个命令中的按行正态性、偏度和峰度
Row wise normality, skewness and kurtosis in one command
我的数据是:
X0 X1 X2 X3 category
0 15 4 4 TAH
0 2 5 0 MAT
0 11 9 0 BIO
我想按行计算正态性、偏度 和峰度。主要原因是我有不同行的类别(在专用列中)。有没有函数可以实现这个功能?
我一直在尝试使用 moments
包和 dplyr
包来做到这一点,类似于 post:
Function that calculates, mean, variance and skewness at the same time in a dataframe。
但是他们的解决方案是按列而不是按行。
df3 %>%
gather(category, Val) %>%
group_by(category) %>%
summarise(Mean = mean(Val),
Vari = var(Val),
Skew = skewness(Val))
为了正常,我对每一行分别尝试了以下命令:
shapiro.test(df3[1,])
如有任何帮助,我们将不胜感激。
你可以使用rowwise
-
library(dplyr)
library(tidyr)
df %>%
rowwise() %>%
mutate(Mean = mean(c_across(X0:X3)),
Vari = var(c_across(X0:X3)),
Shap = shapiro.test(c_across(X0:X3))$p.value,
Skew = moments::skewness(c_across(X0:X3))) %>%
ungroup
# X0 X1 X2 X3 category Mean Vari Shap Skew
# <int> <int> <int> <int> <chr> <dbl> <dbl> <dbl> <dbl>
#1 0 15 4 4 TAH 5.75 41.583 0.232 0.84778
#2 0 2 5 0 MAT 1.75 5.5833 0.220 0.68925
#3 0 11 9 0 BIO 5 34 0.110 0.058244
与您的尝试类似,您可以获取长格式的数据并计算每个 category
(按行)的统计数据。
df %>%
pivot_longer(cols = -category) %>%
group_by(category) %>%
summarise(Mean = mean(value),
Vari = var(value),
Skew = moments::skewness(value))
你可以试试
library(PerformanceAnalytics)
df %>%
select(category, X0:X3) %>%
t %>%
as.data.frame %>%
row_to_names(row_number = 1) %>%
mutate(TAH = as.numeric(TAH),
MAT = as.numeric(MAT),
BIO = as.numeric(BIO)) %>%
sapply(., function(x) list(mean = mean(x), var = var(x), skew = skewness(x), kur = kurtosis(x)))
TAH MAT BIO
mean 5.75 1.75 5
var 41.58333 5.583333 34
skew 0.8477758 0.6892545 0.05824397
kur -0.8325348 -1.141902 -1.922722
我的数据是:
X0 X1 X2 X3 category
0 15 4 4 TAH
0 2 5 0 MAT
0 11 9 0 BIO
我想按行计算正态性、偏度 和峰度。主要原因是我有不同行的类别(在专用列中)。有没有函数可以实现这个功能?
我一直在尝试使用 moments
包和 dplyr
包来做到这一点,类似于 post:
Function that calculates, mean, variance and skewness at the same time in a dataframe。
但是他们的解决方案是按列而不是按行。
df3 %>%
gather(category, Val) %>%
group_by(category) %>%
summarise(Mean = mean(Val),
Vari = var(Val),
Skew = skewness(Val))
为了正常,我对每一行分别尝试了以下命令:
shapiro.test(df3[1,])
如有任何帮助,我们将不胜感激。
你可以使用rowwise
-
library(dplyr)
library(tidyr)
df %>%
rowwise() %>%
mutate(Mean = mean(c_across(X0:X3)),
Vari = var(c_across(X0:X3)),
Shap = shapiro.test(c_across(X0:X3))$p.value,
Skew = moments::skewness(c_across(X0:X3))) %>%
ungroup
# X0 X1 X2 X3 category Mean Vari Shap Skew
# <int> <int> <int> <int> <chr> <dbl> <dbl> <dbl> <dbl>
#1 0 15 4 4 TAH 5.75 41.583 0.232 0.84778
#2 0 2 5 0 MAT 1.75 5.5833 0.220 0.68925
#3 0 11 9 0 BIO 5 34 0.110 0.058244
与您的尝试类似,您可以获取长格式的数据并计算每个 category
(按行)的统计数据。
df %>%
pivot_longer(cols = -category) %>%
group_by(category) %>%
summarise(Mean = mean(value),
Vari = var(value),
Skew = moments::skewness(value))
你可以试试
library(PerformanceAnalytics)
df %>%
select(category, X0:X3) %>%
t %>%
as.data.frame %>%
row_to_names(row_number = 1) %>%
mutate(TAH = as.numeric(TAH),
MAT = as.numeric(MAT),
BIO = as.numeric(BIO)) %>%
sapply(., function(x) list(mean = mean(x), var = var(x), skew = skewness(x), kur = kurtosis(x)))
TAH MAT BIO
mean 5.75 1.75 5
var 41.58333 5.583333 34
skew 0.8477758 0.6892545 0.05824397
kur -0.8325348 -1.141902 -1.922722