这是我的示例数据集。
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) = 3
和someFunction(Joe,B) = 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)
这会计算Name
和Type
的唯一组合的平均值:
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
从这里你可以得到你需要的值。