R 如何在不重复的情况下将函数应用于数据帧的每两列?

R 如何在不重复的情况下将函数应用于数据帧的每两列?,r,dataframe,R,Dataframe,我有一个2000行和40000列的数据框,我希望不重复地对每两列应用一个函数。在下面的示例中,我想添加每两列的值,如V1和V2、V3和V4 set.seed(42) df <- as.data.frame(matrix(rnorm(16),4)) df V1 V2 V3 V4 1 1.3709584 0.40426832 2.0184237 -1.3888607 2 -0.5646982 -0.10612452

我有一个2000行和40000列的数据框,我希望不重复地对每两列应用一个函数。在下面的示例中,我想添加每两列的值,如V1和V2、V3和V4

set.seed(42)
df <- as.data.frame(matrix(rnorm(16),4))

df
          V1          V2         V3         V4
1  1.3709584  0.40426832  2.0184237 -1.3888607
2 -0.5646982 -0.10612452 -0.0627141 -0.2787888
3  0.3631284  1.51152200  1.3048697 -0.1333213
4  0.6328626 -0.09465904  2.2866454  0.6359504

我正在考虑使用
combn
,但它是重复的。有人能帮忙吗?谢谢

尝试使用
purrr
库中的
map2_-df

library(purrr)    
map2_df(.x = df[seq(1,ncol(df),2)], .y = df[seq(2, ncol(df), 2)], ~ .x + .y)

#  A tibble: 4 x 2
#       V1     V3
#    <dbl>  <dbl>
# 1  1.78   0.630
# 2 -0.671 -0.342
# 3  1.87   1.17 
# 4  0.538  2.92 
库(purrr)
map2_df(.x=df[seq(1,ncol(df),2)],.y=df[seq(2,ncol(df),2)],~x+.y)
#一个tibble:4x2
#V1 V3
#      
# 1  1.78   0.630
# 2 -0.671 -0.342
# 3  1.87   1.17 
# 4  0.538  2.92 

也许最简单的方法是使用两个序列进行索引——一个序列给出
c(1,3,…)
,另一个序列给出
c(2,4,…)
——并添加结果:

df[, seq(1,length(df),2)] + df[, seq(2,length(df),2)]

#           V1         V3
# 1  1.7752268  0.6295630
# 2 -0.6708227 -0.3415029
# 3  1.8746504  1.1715483
# 4  0.5382036  2.9225958
df[, seq(1,length(df),2)] + df[, seq(2,length(df),2)]

#           V1         V3
# 1  1.7752268  0.6295630
# 2 -0.6708227 -0.3415029
# 3  1.8746504  1.1715483
# 4  0.5382036  2.9225958