根据另一列选择数据子集

时间:2016-04-23 05:48:12

标签: r

我有一个看起来像这样的数据集:

     Area     Num
[1,] "Area 1" "99"  
[2,] "Area 3" "85"  
[3,] "Area 1" "60"  
[4,] "Area 2" "90"  
[5,] "Area 1" "40"  
[6,] "Area 3" NA    
[7,] "Area 4" "10" 
...

代码:

structure(c("Area 1", "Area 3", "Area 1", "Area 2", "Area 1", 
"Area 3", "Area 4", "99", "85", "60", "90", "40", NA, "10"), .Dim = c(7L, 
2L), .Dimnames = list(NULL, c("Area", "Num")))

我需要对Num中每个Area的值进行一些计算,例如计算每个Area的总和,或每个summary Area }}

我正在考虑使用nested for循环来实现这一目标,但我不知道该怎么做。

3 个答案:

答案 0 :(得分:2)

您可以使用aggregate执行此操作,但dplyr包可以很容易地解决此类问题。但是,这个问题有很多重复。

library(dplyr)

df <- structure(c("Area 1", "Area 3", "Area 1", "Area 2", "Area 1", 
                  "Area 3", "Area 4", "99", "85", "60", "90", "40", NA, "10"), .Dim = c(7L, 
                                                                                        2L), .Dimnames = list(NULL, c("Area", "Num")))


df <- data.frame(df)
df$Num <- as.numeric(df$Num)

df2 <- df %>%
  group_by(Area) %>%
  summarise(totalNum = sum(Num, na.rm=T))

df2

答案 1 :(得分:2)

为了将函数应用于因子的每个级别,我们可以递归到by函数:

dt <- structure(c("Area 1", "Area 3", "Area 1", "Area 2", "Area 1", 
              "Area 3", "Area 4", "99", "85", "60", "90", "40", NA, "10"), .Dim = c(7L, 2L), .Dimnames = list(NULL, c("Area", "Num")))


dt <- data.frame(dt)
dt$Num <- as.numeric(dt$Num)

t <- by(dt$Num, dt$Area, sum)
t

答案 2 :(得分:1)

使用data.table

做同样的事情
library(data.table)

dt <- data.table(df)

dt[,sum(as.numeric(Num),na.rm=T),by=Area]
##         Area  V1
##    1: Area 1 199
##    2: Area 3  85
##    3: Area 2  90
##    4: Area 4  10