首页 > 解决方案 > 如何在 R 语言的 sum() 中添加函数

问题描述

我有一个数据框:

SampleName <- c(A,A,A,A,B)
NumberofSample <- c(1,2,3,1,4)
SampleResult <- c(3,6,12,12,14)

Data <- data.frame(SampleName,NumberofSample,SampleResult)
head(Data)

SampleName NumberofSample SampleResult
1 A 1  3
2 A 2  6
3 A 3 12
4 A 1 12
4 B 4 14

我的想法是:当 SampleResult <15 && SampleResult >5 时,样本 A 有 6 个符合条件的样本站点,样本 B 有 4 个符合条件的样本站点。所以理想的结果应该是这样的:

SampleName Frequency
1 A 6
2 B 4

我写的是这样的:

D1<- aggregate(SampleResult~SampleName, Data, function(x)sum(x<15 && x>5))

但我觉得这缺乏类似的东西

x * Data$NumberofSample[x]

所以我的问题是什么是正确的编码方式?谢谢

标签: r

解决方案


我们可以使用dplyr. 按'SampleName'分组,根据'SampleResult'对满足条件的'NumberofSample'进行子集化,得到sum

library(dplyr)
Data %>%
     group_by(SampleName) %>% 
     summarise(Frequency = sum(NumberofSample[SampleResult < 15 & 
              SampleResult > 5]))
# A tibble: 2 x 2
#  SampleName Frequency
#  <chr>          <int>
#1 A                  6
#2 B                  4

如果我们更喜欢aggregate

aggregate(cbind(Frequency = NumberofSample * (SampleResult < 15 & 
          SampleResult > 5)) ~ SampleName, Data, sum)
#   SampleName Frequency
#1          A         6
#2          B         4

请注意, 的输出&&是单个 TRUE/FALSE 值

(1:3 > 1) && (2:4 > 2)

而不是相同长度的逻辑向量


推荐阅读