我的数据包含连续的列V1-V1998,其中包含其他列。我想计算1998列范围内行的偏度。
这是我尝试过的代码:
ND2a <- NoDup2 %>%
rowwise() %>%
mutate(skew2 = skewness(V1:V1998))
这会创建一个名为skew2的新列,但是不会计算偏度,而是使用&#34; NaN&#34;填充该列。有谁知道为什么会这样?
我使用了瞬间包中的偏斜。
我的数据看起来有点像这样
Data V1 V2 V3 ..... V1998 ....
Acaricomes phytoseiuli 0.01 0.0 0.002 0.03
Acetivibrio cellulolyticus 0.005 0.002 0.011 0.04
Acetobacter aceti 0.001 0.003 0.004 0.0
答案 0 :(得分:1)
你可以这样做:
library(e1071)
# get column names
cols <- paste0('V', seq(1,1998,1))
# apply function on selected columns
NoDup2$skew_value <- apply(NoDup2[,cols], 1, skewness)
通过这个,我们计算给定数据集中所有列的每一行的偏度。
答案 1 :(得分:1)
我会尝试,但取决于你之后想做什么。
library(tidyverse)
iris %>%
gather(key, value, -Species) %>%
group_by(Species) %>%
mutate(skew2=moments::skewness(value)) %>%
slice(1:2)
# A tibble: 6 x 4
# Groups: Species [3]
Species key value skew2
<fct> <chr> <dbl> <dbl>
1 setosa Sepal.Length 5.10 0.146
2 setosa Sepal.Length 4.90 0.146
3 versicolor Sepal.Length 7.00 0.157
4 versicolor Sepal.Length 6.40 0.157
5 virginica Sepal.Length 6.30 0.128
6 virginica Sepal.Length 5.80 0.128
我使用iris
数据,因为它是一个更可重复的示例。我们的想法是gather
数据。然后进行分组和计算。之后,您可以再次spread
数据。要获得每行的偏度,您可以使用:
iris %>%
gather(key, value, -Species) %>%
group_by(Species) %>%
summarise(skew2=moments::skewness(value))
# A tibble: 3 x 2
Species skew2
<fct> <dbl>
1 setosa 0.146
2 versicolor 0.157
3 virginica 0.128