R中两列之间的运算

时间:2019-02-28 18:03:47

标签: r function loops apply

我有一个像这样的数据集:

set.seed(123)
spring_2000 <- runif(15, 270, 330)
spring_2001 <- runif(15, 270, 330)
spring_2002 <- runif(15, 270, 330)
winter_2000 <- runif(15, 4, 60)
winter_2001 <- runif(15, 4, 60)
winter_2002 <- runif(15, 4, 60)

df_spring <- data.frame(spring_2000=spring_2000,
             spring_2001=spring_2001,
             spring_2002=spring_2002)

df_winter <- data.frame(winter_2000=winter_2000,
                    winter_2001=winter_2001,
                    winter_2002=winter_2002)

df <- cbind(df_winter, df_spring)

我想将此功能应用于对应于同一年春季和冬季的所有成对的列:

subtraction <- function(x,y){
  x+(365-y)
}

其中x是winter_2000,y是spring_2000,然后x是winter_2001,y是spring_2001,依此类推,当然,我想对数据集中的所有列对快速有效地做到这一点。我为此感到挣扎。

预期输出是一个由三列组成的数据帧(每年一列,即2000、2001和2002),其值对应于第一列的winter_2000 +(365-spring_2000),而对应于第一列的winter_2001 +(365-spring_2001)第二列,第三列,winter_2001 +(365-spring_2001)。

1 个答案:

答案 0 :(得分:1)

这是您需要的吗?

library(tidyr)
library(dplyr)
df %>% 
  gather(Year,Value,contains("winter")) %>% 
  gather(Year_1,Value_1,contains("spring")) %>% 
 group_by(Year,Year_1) %>% 
  mutate(Target=Value_1 + (365-Value))