首页 文章

使用r返回布尔数据的特定子集结果

提问于
浏览
0

我有一个数据矩阵,我想在发出布尔命令后返回特定列的摘要/均值 .

我试过了:

by(data$total > 500, data$operation1 == 1 & data$operation2 == 1, summary)

但是它只返回,结果的数量为TRUE或FALSE . 不是总数> 500的实际平均值/摘要 .

然后我尝试了:

summary(subset(data, data$total > 500 & data$operation1 == 1 & data$operation2 == 1))

哪个确实有效,但它返回了我数据中所有列的所有子集,而不仅仅是总数> 500,这正是我正在寻找的 .

我有一种感觉,正确的答案是子()和by()命令的混合,但我想出一个空白 .

感谢您的输入 .

2 回答

  • 1

    这是一种可能性:

    # build small dataset
    factor1 <- factor(rep(1:2,each=25))
    factor2 <- factor(rep(3:4,each=25))  
    data<-rnorm(50,500,50) 
    alt.data<-rnorm(50,500,50)
    frame <- data.frame(factor1,factor2,data,alt.data)
    
    # subset the dataframe
    subset(frame, data>500 & factor1==1 & factor2==3)
    
    # summarize the one variable
    summary(subset(frame, data>500 & factor1==1 & factor2==3)[,3]) 
    
    # or if you want multiple columns
    summary(subset(frame, data>500 & factor1==1 & factor2==3)[,3:4])
    

    如果我正确地解释你的问题 .

  • 1

    试试这个

    data <- data.frame(total = sample(seq(490,510), 10),
                       operation1 =  sample(seq(1,2), 10, replace = T),
                       operation2 = sample(seq(1,2), 10, replace = T),
                       ColumnToSum1 = rnorm(10, 2, 6),
                       ColumnToSum2 = rnorm(10, 2, 6)) # Your data
    
    
    summary(data[data$total > 500 & data$operation1 == 1 & data$operation2 == 1, c("ColumnToSum1", "ColumnToSum2")])
    colMeans(data[data$total > 500 & data$operation1 == 1 & data$operation2 == 1, c("ColumnToSum1", "ColumnToSum2")], na.rm = T)
    

    示例结果:

    ColumnToSum1       ColumnToSum2   
     Min.   :-0.99907   Min.   : 6.973  
     1st Qu.:-0.08076   1st Qu.: 9.001  
     Median : 0.83755   Median :11.028  
     Mean   : 0.83755   Mean   :11.028  
     3rd Qu.: 1.75586   3rd Qu.:13.055  
     Max.   : 2.67416   Max.   :15.082  
    
    ColumnToSum1 ColumnToSum2 
       0.8375483   11.0277917
    

相关问题