使用一系列列(R)

时间:2018-03-27 14:24:32

标签: r dplyr row

我的数据包含连续的列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

2 个答案:

答案 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