for循环数据框和循环使用唯一值

时间:2013-04-26 21:59:47

标签: r for-loop dataframe

我正在尝试使用代码来构建一个用于三阶段集群采样的函数,但是,我现在正在处理虚拟数据,因此我可以理解我的函数会发生什么。

我正在研究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'

非常感谢任何帮助!

编辑:正确的语言

1 个答案:

答案 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)))