我正在尝试使用代码来构建一个用于三阶段集群采样的函数,但是,我现在正在处理虚拟数据,因此我可以理解我的函数会发生什么。
我正在研究for循环并拥有一个带有分组值的数据框。我有一个包含数据的数据框:
Cluster group value value.K.bar value.M.bar N.bar
1 1 A 1 1.5 2.5 4
2 1 A 2 1.5 2.5 4
3 1 B 3 4.0 2.5 4
4 1 B 4 4.0 2.5 4
5 2 B 5 4.0 6.0 4
6 2 C 6 6.5 6.0 4
7 2 C 7 6.5 6.0 4
我试图运行for循环
n <- dim(data)[1]
e <- 0
total <- 0
for(i in 1:n) {e = data.y$value.M.bar[i] - data$N.bar[i]
total = total + e^2}
我的问题是:有没有办法运行相同的循环但是对于组中的唯一值?说:
Group 'A', 'B', 'C'
非常感谢任何帮助!
编辑:正确的语言
答案 0 :(得分:4)
例如,您可以使用by
来按组应用数据。首先,我将代码包装在一个以数据作为输入的函数中。
get.total <- function(data){
n <- dim(data)[1]
e <- 0
total <- 0
for(i in 1:n) {
e <- data$value.M.bar[i] - data$N.bar[i] ## I correct this line
total <- total + e^2
}
total
}
然后计算B组和C组的总数,你可以这样做:
by(data,data$group,FUN=get.total)
data$group: A
[1] 4.5
----------------------------------------------------------------------------------------------------
data$group: B
[1] 8.5
----------------------------------------------------------------------------------------------------
data$group: C
[1] 8
但更好的是,这是矢量化版本的功能
by(data,data$group,
function(dat)with(dat, sum((value.M.bar - N.bar)^2)))