R 如何在不重复的情况下将函数应用于数据帧的每两列?
我有一个2000行和40000列的数据框,我希望不重复地对每两列应用一个函数。在下面的示例中,我想添加每两列的值,如V1和V2、V3和V4R 如何在不重复的情况下将函数应用于数据帧的每两列?,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
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