2017-03-09 57 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