计算符合逻辑检查的数据框中的元素

时间:2017-11-16 23:09:57

标签: r logic

我有一个数据框(studentData)

     StudentID   Freshmen    Sophomore      Lot200      Lot700
         001           1           0         200         000
         002           0           1         200         700
         003           1           0         200         000

我想要了解不同学年的停车时间。如果新生是1岁,那么大二的相似之处是1。

想拥有此数据框(费用)

  Freshmen        Sophomore 
  400             900

尝试

    if(length(which(studentData$Freshmen ==1))
       {
          costs$Freshmen <- studentData$Lot200 + studentData$Lot700
       } 

但是这导致每个条目都返回TRUE,并且无论学年如何,都有效地增加了每个学生的停车费用。我有什么想法可以纠正这个问题吗?

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

library(tidyverse)

df %>% 
  mutate(lot_sum = Lot200 + Lot700,
         Freshmen = sum(lot_sum * Freshmen),
         Sophomore = sum(lot_sum * Sophomore)) %>% 
  distinct(Freshmen, Sophomore)

返回:

  Freshmen Sophomore
1      400       900

答案 1 :(得分:0)

我会像tyluRp一样使用dplyr。在基数R中,您可以得到相应的数量:

f = sum(studentData[studentData$Freshmen == 1,]$Lot200, 
        studentData[studentData$Freshmen == 1,]$Lot700)
s = sum(studentData[studentData$Sophomore == 1,]$Lot200, 
        studentData[studentData$Sophomore == 1,]$Lot700)

然后使用data.frame构建您想要的框架。

df = data.frame(Freshmen = f, Sophomore = s)

乏味,甚至可能不是最好的基础R解决方案。但这是获得所需金额的更惯用的方式。