R 每两列的乘积(并非所有成对乘积)

R 每两列的乘积(并非所有成对乘积),r,R,这与不同 考虑以下几点: 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.666666666666

这与不同

考虑以下几点:

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

有没有一种方法可以在不使用循环的情况下执行此操作?

这可以满足您的实际要求,给定一个只有一行的
数据。frame

v <- as.numeric(df[, seq(1, ncol(df), by=2)] * df[, seq(2, ncol(df), by=2)])

这将为您提供所需的内容,给定一个只有一行的
data.frame

v <- as.numeric(df[, seq(1, ncol(df), by=2)] * df[, seq(2, ncol(df), by=2)])

您还可以使用dplyr的滞后/超前功能。例如:

library(dplyr)
(df*lag(df))[,seq(2,length(df),2)]

您还可以使用dplyr的滞后/超前功能。例如:

library(dplyr)
(df*lag(df))[,seq(2,length(df),2)]

只需使用整数序列索引偶数和奇数项
df[,seq(from=1,to=ncol(df),by=2)]*df[,seq(from=2,to=ncol(df),by=2)]
@qdread为什么我没有想到这个?谢谢只需使用整数序列索引偶数和奇数项
df[,seq(from=1,to=ncol(df),by=2)]*df[,seq(from=2,to=ncol(df),by=2)]
@qdread为什么我没有想到这个?谢谢