计算数据子集,但不首先将子集另存为新data.frame

计算数据子集,但不首先将子集另存为新data.frame,r,dataframe,data.table,subset,plyr,R,Dataframe,Data.table,Subset,Plyr,我有两个data.frames,我正在使用它们创建一个新变量C(标准化的距离度量)。每个data.frame都有以下信息(坐标、季节、变量)。我将在df.a和df.b之间为每个唯一的坐标季节(即每个季节的每个XX、YY-X、Y对)计算C。为此,我合并了两个data.frame(df.new)准备计算C 以下是我当前将如何执行此操作: # for example, for season = SUM # V1 and VV1 are the same variable from the differ

我有两个data.frames,我正在使用它们创建一个新变量
C
(标准化的距离度量)。每个data.frame都有以下信息(坐标、季节、变量)。我将在
df.a
df.b
之间为每个唯一的坐标季节(即每个季节的每个XX、YY-X、Y对)计算
C
。为此,我合并了两个data.frame(
df.new
)准备计算
C

以下是我当前将如何执行此操作:

# for example, for season = SUM
# V1 and VV1 are the same variable from the different dataframes, SEA = Season, 
# X,Y and XX, YY are coordinates 
df.new.SUM <- subset(df.new, SEA == "SUM") # Summer
attach(df.new.SUM)
df.new.SUM$C_V1 <- (V1-VV1)^2/sd(V1)^2 # almost wouldn't need to subset except that the denominator here should only be for one season
df.new.SUM$C_V2 <- (V2-VV2)^2/sd(V2)^2
df.new.SUM$C <- sqrt(rowSums(df.new.SUM[,c("C_V1","C_V2")]))
# continue for other seasons and then rbind  

只需将这些步骤包装在一起,以后请不要使用
attach

df.new.SUM$C <- sqrt( with(df.new.SUM, (V1-VV1)^2/sd(V1)^2 +(V2-VV2)^2/sd(V2)^2 ) )

df.new.SUM$C您可以将其作为函数来编写。它看起来并不太笨重。向量运算速度很快。感谢关于
attach
的提示,我在这里找到了一个关于
attach
的讨论:我修改了您的建议,并使用了上面的@Richard Scriven建议来获得满意的解决方案(在上面的代码中)。
df.new.SUM$C <- sqrt( with(df.new.SUM, (V1-VV1)^2/sd(V1)^2 +(V2-VV2)^2/sd(V2)^2 ) )