-1

我有一个数据框:

df1
vec1  vec2  vec3  vec4  vec5
0     10    5     12    5
10    20    13    1     7
20    30    28    13    16

我对它执行 combn() :

x = combn( df1[,1:4] , 3 )

它返回一个这样的矩阵:

x
V1           V2
c(0,10,20)   c(0,10,20)
c(10,20,30)  c(5,13,28)
c(5,13,28)   c(12,1,13)

我想获得一个向量,其中每个向下的元素是 x 的每一列的 c(n,n+1,n+2) 中每个 n 的中值。像这样:

y
V1                         V2
5 #(median of 0,10,5)      5 #(median of 0,5,12)
13 #(median of 10,20,13)   10 #(median of 0,5,12)
28 #(median of 20,30,28)   20 #(median of 20,28,13)

所以你会看到它被转换了,所以沿着 y 中的向量向下的每个项目都是列表的原始 combn() 向量中每个 n 元素的中值。

4

1 回答 1

2

我们可以使用apply()应用于combn()行,然后使用median()函数 in combn(),转置结果。

t(apply(df1[1:4], 1, combn, 3, median))
#      [,1] [,2] [,3] [,4]
# [1,]    5   10    5   10
# [2,]   13   10   10   13
# [3,]   28   20   20   28

数据:

df1 <- structure(list(vec1 = c(0L, 10L, 20L), vec2 = c(10L, 20L, 30L
), vec3 = c(5L, 13L, 28L), vec4 = c(12L, 1L, 13L), vec5 = c(5L, 
7L, 16L)), .Names = c("vec1", "vec2", "vec3", "vec4", "vec5"), class = "data.frame", row.names = c(NA, 
-3L))
于 2015-10-03T20:54:02.300 回答