首页 > 解决方案 > R中的列对之间的操作

问题描述

我有一个这样的数据集:

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) 第三列。

标签: rfunctionloopsapply

解决方案


这是你需要的吗?

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))

推荐阅读