列中的 Rowwise Mean 包含除最后一列之外的单词

Posted

技术标签:

【中文标题】列中的 Rowwise Mean 包含除最后一列之外的单词【英文标题】:Rowwise Mean in columns contain word except last column 【发布时间】:2022-01-07 05:59:47 【问题描述】:

我正在尝试获取名称中包含特定单词的列的平均值,除了最后一列名称中包含相同单词的列,例如

df <- data.frame( ABC_1 = runif(3),
            ABC_2 = runif(3),
            ABC_3 = runif(3),
            ABC_4 = runif(3) )

这里我得到最后一列包含单词的值:ABC,列:max

df2=df %>%  
rowwise() %>%
mutate_at(vars(last(contains('ABC'))), funs(max= max(., na.rm = TRUE))) 


      ABC_1 ABC_2 ABC_3 ABC_4   max
      <dbl> <dbl> <dbl> <dbl> <dbl>
    1 0.191 0.486 0.455 0.246 0.246
    2 0.523 0.728 0.812 0.517 0.517
    3 0.134 0.937 0.992 0.899 0.899

使用相同的逻辑,现在我尝试获取名称为 ABC 的所有列的平均值,除了最后一列:

df3=df %>%  
rowwise() %>%
mutate_at(vars(last(contains('ABC'))), funs(max= max(., na.rm = TRUE))) %>%
mutate_at(vars(-last(contains('ABC'))), funs(mean= mean(., na.rm = TRUE)))

但遗憾的是我没有得到预期的结果:

      ABC_1 ABC_2 ABC_3 ABC_4   max ABC_1_mean ABC_2_mean ABC_3_mean max_mean
      <dbl> <dbl> <dbl> <dbl> <dbl>      <dbl>      <dbl>      <dbl>    <dbl>
    1 0.191 0.486 0.455 0.246 0.246      0.191      0.486      0.455    0.246
    2 0.523 0.728 0.812 0.517 0.517      0.523      0.728      0.812    0.517
    3 0.134 0.937 0.992 0.899 0.899      0.134      0.937      0.992    0.899

【问题讨论】:

好吧,我很困惑:你说你想要包含 ABC 但最后一个除外的列的平均值。但是在你的例子中,你取了这个特定最后一列的最大值。所以这个逻辑不适合你想要的,对吧? 嗯,我的意思是我可以得到具有特定名称的最后一列的值 好的,所以你需要颠倒这个逻辑来得到你想要的。所有列,但最后一个。 @tmfmnk 的答案对我来说似乎很好。另外:为了使您的示例可重现,您可以在运行runif 之前使用 set.seed("the number you want")。更多信息there 是的,@tmfmnk 的回答对我也很有效 【参考方案1】:

一个选项可能是:

df %>%
    mutate(ABC_mean = rowMeans(across(head(starts_with("ABC"), -1))))

      ABC_1     ABC_2     ABC_3     ABC_4  ABC_mean
1 0.5957359 0.7201537 0.1304605 0.1697986 0.4821167
2 0.6865635 0.9463447 0.8447037 0.4149000 0.8258706
3 0.2364415 0.8335135 0.6342009 0.4410836 0.5680520

【讨论】:

以上是关于列中的 Rowwise Mean 包含除最后一列之外的单词的主要内容,如果未能解决你的问题,请参考以下文章

返回值的公式,其中一列中的第一个单词与另一列的最后四位匹配

Kendo UI:更新一列数据以更改另一列中的值

kettle使用记录

Google表格中的查询功能-根据另一列获取一列中的非空最后一个单元格

大量数据,尝试替换一列中的分隔符但不是所有分隔符

如果另一列中的相应行包含特定值,我想使用条件格式突出显示一列中的单元格