2017-03-09 51 views
0

解决R:变量,通过行和列

假设匹配两个dataframes我们给定:

#Defining sample variables  

    set.seed(1) ##Note I didn't set seed for the values below so your numbers will be different 

    date <- as.Date(c('2015-1-1', '2015-1-1', '2015-1-3', '2015-1-3', '2015-1-5', '2015-1-5')) 
    variable1 <- runif(6, max=1, min=0) 
    date2 <- as.Date(c('2015-1-1', '2015-1-3', '2015-1-5')) 
    variable2 <- runif(3, max=2, min=1) 
    variable3 <- runif(3, max=5, min=4) 
    df1 <- data.frame(date, variable1) 
    df2 <- data.frame(date2, variable2, variable3) 

#Sample dataframes 

    #df1 
     Date variable1 
1 2015-01-01 0.2655087 
2 2015-01-01 0.3721239 
3 2015-01-03 0.5728534 
4 2015-01-03 0.9082078 
5 2015-01-05 0.2016819 
6 2015-01-05 0.8983897 

    #df2 
     Date variable2 variable3 
1 2015-01-01 1.646115 4.706171 
2 2015-01-03 1.457847 4.549162 
3 2015-01-05 1.015068 4.735463 

我想定义一些函数,吐出值基于变量2 OR变量3,取决于变量1的值。

我有什么至今:

SomeVariable <- function(x){ 
      if (x < 0.5) 
        df2$variable2 
      else 
        df2$variable3 
    } 

    SomeVariable(df1$variable1[1]) 
[1] 1.646115 1.457847 1.015068 

但不知何故,我需要让这个功能也按日期匹配变量1,变量2,和variable3 的值。

例如,第一个条目上的SomeVariable应该只返回1.646,最后一个SomeVariable应该只返回4.735。

#Final output should be: 
     Date SomeVariable 
    1 2015-01-01 1.646115 
    2 2015-01-01 1.646115 
    3 2015-01-03 4.549162 
    4 2015-01-03 4.549162 
    5 2015-01-05 1.015068 
    6 2015-01-05 4.735463 
+1

对OP进行了一些编辑。 – Adam

+1

使用set.seed编辑的数字(1) – Adam

回答

0

也许我完全误解你想要什么,但我不认为你需要一个复杂的功能。

使用设置种子以获得可重复的数据

set.seed(123) 
date <- as.Date(c('2015-1-1', '2015-1-1', '2015-1-3', '2015-1-3', '2015-1-5', '2015-1-5')) 
variable1 <- runif(6, max=1, min=0) 
date2 <- as.Date(c('2015-1-1', '2015-1-3', '2015-1-5')) 
variable2 <- runif(3, max=2, min=1) 
variable3 <- runif(3, max=5, min=4) 
df1 <- data.frame(date, variable1) 
df2 <- data.frame(date, variable2, variable3) 

添加列变量1使用匹配的日期DF2()函数

Indices<-match(df2$date, df1$date) 
df2$variable1 <- df1$variable1[Indices] 

取决于变量1

df2$SomeVar[df2$variable1<0.5] <- df2$variable2[df2$variable1<0.5] 
df2$SomeVar[df2$variable1>0.5] <- df2$variable3[df2$variable1>0.5] 
值添加列SomeVar
+0

输出与我正在查找的内容非常接近,但是我想将它作为df1中的列来代替(因为每个日期都有多个SomeVar值) 。 此外,这是一个简化的例子,我想要做的真正的df2中有大约8个变量,所以SomeVariable将被分割为像(x <0.1 = var2,x <0.2 = var3,...) – Adam

+0

Hold上,颠倒你的代码,并使用merge()函数来照顾多重输入问题,我认为它可能工作.. – Adam