for循环通过数据帧和使用唯一值循环
问题描述:
我正在尝试为三阶段集群采样构建一个函数的代码,但是,我现在只使用虚拟数据,因此我可以理解将要进入的内容我的功能。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)))
是什么'数据.y'而不是'data'? – 2013-04-26 23:26:08
只是想一想你的例子:在我的(有限的)实际数据体验中,我发现将计算值(如'value.K.bar')与原始数据一起存储是一种糟糕的策略,因为如果/当我子集或放置行,那些计算出的值可能会失效。 – Frank 2013-04-27 04:07:54