如何将来自一个变量的数据与R中另一个变量的子集进行比较

时间:2017-12-28 12:23:19

标签: r

我正在使用两个变量“Neighborhood”和“UtilitySpending”。第一个是名义变量,其中所有记录都是“城市”,“城镇”或“农村”。第二个是一个连续变量,它只是给定家庭在一个月内在公用事业上花费的金额(数据集中从500美元到6000美元不等)。

我的问题是,使用这两个变量,我想找到邻域变量中“城市”中所有记录的效用支出的平均值,以便进行z检验以查看是否存在与整个数据集的平均值显着不同。我确信有一个我可以使用的命令,但是我找不到一个可以隔离它的命令。找到这些信息的最佳方法是什么,因为我有3000条记录需要筛选?

我想找到所有那些以“city”作为邻域值的记录的UtilitySpending的平均值。我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

使用dplyr包:

library(dplyr)

dt<-data.frame(Neighbourhood=c("city","rural","town","city","rural"),UtilitySpending=c(500,753,438,3361,4717))

dt<-dt %>% group_by(Neighbourhood) %>%
           dplyr::summarize(total_UtilitySpending=mean(UtilitySpending)) %>%
           as.data.frame() %>%
           filter(Neighbourhood=="city")

答案 1 :(得分:0)

这可以在基线R中一行中轻松完成。由于您没有提供数据,我正在重新使用上一个问题的集合,请参见下文。

使用此data.frame,您可以通过子集查找任何均值等。这是在变量Urgent等于YPred时计算列L2的平均值的示例:

mean( df[ df$YPred == "L2", "Urgent" ] )
[1] 44

示例数据下方:

    df <- structure(list(Tag = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L
), YPred = structure(c(1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L
), .Label = c("L1", "L2", "L3", "L4", "L5"), class = "factor"), 
    Long = c(1004L, 544L, 545L, 282L, 1L, 2068L, 3006L, 3711L, 
    2342L, 33L), Medium = c(108L, 252L, 211L, 149L, 0L, 17L, 
    110L, 248L, 341L, 4L), short = c(58L, 118L, 131L, 73L, 4L, 
    0L, 43L, 150L, 189L, 2L), Urgent = c(5L, 70L, 65L, 24L, 5L, 
    22L, 18L, 31L, 96L, 2L)), .Names = c("Tag", "YPred", "Long", 
"Medium", "short", "Urgent"), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10"))