如何计算特定列相对于R中特定变量的平均值

时间:2017-01-19 15:43:43

标签: r average multiple-columns

这是我的示例数据集。

Name    Type    B     C     D
Carl    AB      1     0     2
Carl    AB      5     4     1 
Joe     B       0     3     1
Joe     O       2     1     0
Joe     B       4     4     2 

我的目标是将列B的平均值计算为如下函数:someFunction(Name,Type)

例如,someFunction(Carl,AB) = 3someFunction(Joe,B) = 2

有谁知道我会怎么做?

2 个答案:

答案 0 :(得分:1)

我们可以使用函数根据函数参数中的字符串输入获取B的子集,然后得到mean

f1 <- function(str1, str2){
        mean(subset(dat, Name == str1 & Type ==str2, select = B)[,1])
 }

f1("Carl", "AB")
#[1] 3

f1("Joe", "B")
#[1] 2

更新

如果我们还需要mean列名作为参数,

f2 <- function(str1, str2, meanCol){
     mean(dat[dat$Name ==str1 & dat$Type == str2, meanCol])
}

f2("Carl", "AB", "B")
#[1] 3

数据

dat <- structure(list(Name = c("Carl", "Carl", "Joe", "Joe", "Joe"), 
Type = c("AB", "AB", "B", "O", "B"), B = c(1L, 5L, 0L, 2L, 
4L), C = c(0L, 4L, 3L, 1L, 4L), D = c(2L, 1L, 1L, 0L, 2L)),
 .Names = c("Name", 
"Type", "B", "C", "D"), class = "data.frame", row.names = c(NA, 
-5L))

答案 1 :(得分:0)

这会计算NameType的唯一组合的平均值:

dat %>% group_by(Name, Type) %>% summarise(mn = mean(B))
Source: local data frame [3 x 3]
Groups: Name [?]

   Name  Type    mn
  <chr> <chr> <dbl>
1  Carl    AB     3
2   Joe     B     2
3   Joe     O     2

从这里你可以得到你需要的值。