【发布时间】:2018-01-18 03:52:21
【问题描述】:
这与R pairwise product不相同。
考虑以下几点:
df <- structure(list(V1 = 10.3333333333333, V2 = 1.66666666666667,
V3 = 8.66666666666667, V4 = 2.66666666666667, V5 = 8.76666666666667,
V6 = 2, V7 = 6.33333333333333, V8 = 1.66666666666667, V9 = 11,
V10 = 2.66666666666667, V11 = 4.33333333333333, V12 = 1.66666666666667,
V13 = 9.83333333333333, V14 = 3.33333333333333), class = "data.frame", .Names = c("V1",
"V2", "V3", "V4", "V5", "V6", "V7", "V8", "V9", "V10", "V11",
"V12", "V13", "V14"), row.names = c(NA, -1L))
如果我们将其视为向量 V,我想计算一个由元素 V[i] * V[i+1] 组成的向量,其中 i = 1, 3, 5, ...., 13 .(即第一个分量是df的前两个分量的乘积,第二个分量是df的第三个和第四个分量的乘积,等等)
也就是说,以下会产生所需的输出:
> v <- numeric(7)
> df <- structure(list(V1 = 10.3333333333333, V2 = 1.66666666666667,
+ V3 = 8.66666666666667, V4 = 2.66666666666667, V5 = 8.76666666666667,
+ V6 = 2, V7 = 6.33333333333333, V8 = 1.66666666666667, V9 = 11,
+ V10 = 2.66666666666667, V11 = 4.33333333333333, V12 = 1.66666666666667,
+ V13 = 9.83333333333333, V14 = 3.33333333333333), class = "data.frame", .Names = c("V1",
+ "V2", "V3", "V4", "V5", "V6", "V7", "V8", "V9", "V10", "V11",
+ "V12", "V13", "V14"), row.names = c(NA, -1L))
> for (i in 1:length(v)){
+ v[i] <- df[1,2*i-1] * df[1,2*i]
+ }
> v
[1] 17.222222 23.111111 17.533333 10.555556 29.333333 7.222222 32.777778
有没有办法做到这一点没有循环?
【问题讨论】:
-
只需用整数序列索引偶数和奇数条目。
df[, seq(from = 1, to = ncol(df), by = 2)] * df[, seq(from = 2, to = ncol(df), by = 2)] -
@qdread 为什么我没有想到这一点?谢谢!
标签: r