我正在尝试编写代码来构建用于三阶段聚类采样的函数,但是,我现在只是使用虚拟数据,以便我可以了解我的函数中的内容。
我正在处理 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'
任何帮助将不胜感激!
编辑:正确的语言
最佳答案
例如,您可以使用 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)))
关于r - for 循环数据框并使用唯一值循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16245862/