与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
有没有办法没有循环?
ç”案 0 :(得分:1)
如果data.frame
åªæœ‰ä¸€è¡Œï¼Œé‚£ä¹ˆè¿™å°±æ˜¯ä½ è¦æ±‚çš„å—æ ·ï¼š
v <- as.numeric(df[, seq(1, ncol(df), by=2)] * df[, seq(2, ncol(df), by=2)])
çœç•¥as.numeric
以将结果ä¿æŒä¸ºdata.frame
。这将在具有更多行的data.frame
上按行方å¼å·¥ä½œï¼Œå¦‚æžœdata.frame
具有奇数个å˜é‡ï¼Œåˆ™ä¼šæŠ›å‡ºé”™è¯¯ã€‚
å¦‚æžœä½ æ‰€è°“çš„é‚£è¡Œæ•°å—åªæ˜¯ä¸€ä¸ªå‘é‡V
,那么原ç†æ˜¯ä¸€æ ·çš„。
V <- unlist(df, recursive = TRUE, use.names = FALSE)
v <- V[seq(1, length(V), by=2)] * V[seq(2, length(V), by=2)]
ç”案 1 :(得分:1)
您还å¯ä»¥ä½¿ç”¨dplyrçš„lag / lead函数。例如:
library(dplyr)
(df*lag(df))[,seq(2,length(df),2)]