【问题标题】:Applying function to every row using a range of columns (R)使用一系列列 (R) 将函数应用于每一行
【发布时间】:2018-03-27 14:24:32
【问题描述】:

我的数据包含连续的列 V1-V1998,其他列位于这些列的任一侧。我想计算 1998 列范围内的行的偏度。

这是我试过的代码:

ND2a <- NoDup2 %>%
  rowwise() %>%
  mutate(skew2 = skewness(V1:V1998))

这会创建一个名为 skew2 的新列,但不会计算偏度,而是用“NaN”填充该列。有谁知道这可能是为什么?

我正在使用时刻包中的偏度。

我的数据看起来有点像这样

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

【问题讨论】:

    标签: r dplyr row


    【解决方案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)
    

    这样,我们计算给定数据集中所有列的每一行的偏度。

    【讨论】:

    • Op 需要逐行计算偏度,即使如此也不是整行。你的 MARGIN=1 而不是 2
    • @Onyambu 对不起,我的错。现已修复。
    • @CodingIsHardMan 我已经更新了解决方案。请检查。
    • @ManishSaraswat 而不是行我的意思是列我不希望它使用每一列,只是列 V1(在第 2 列中)到 V1998(在第 1999 列中)这给了我一个错误,可能因为它正在使用包含字符串的其他列
    • @ManishSaraswat 谢谢,这似乎有效。标记为答案
    【解决方案2】:

    我会尝试,但取决于您之后想要做什么。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-17
      • 2019-03-10
      • 1970-01-01
      • 1970-01-01
      • 2021-10-17
      • 1970-01-01
      • 2018-03-27
      • 1970-01-01
      相关资源
      最近更新 更多