2015-09-25 54 views
0

我剛剛開始與R合作,所以原諒我的無知。 我有兩個數據集在R中,如何比較不同大小的數據幀的列

  1. ProjectData其具有20000行與含有日期
  2. HolidayData其具有與含有假期列表的Date柱90點的行的列表的Date柱。

我需要的日期與ProjectDataHolidayData比較,如果從ProjectData日期存在於Holiday然後在ProjectData設置IsHolidayTrue

我想下面的代碼會工作,但它從來沒有給我正確的結果:

for (d in projectdata$cDate) 
{ 
    for (dH in HolidayDate$Date) 
    { 
    projectdata$IsHoliday <- ifelse(d==dH,TRUE,FALSE) 
    break 
    } 
} 

是這種做法對嗎?

回答

2

嘗試:

projectdata$IsHoliday <- projectdata$cDate %in% HolidayDate$Date 

你有一對夫婦的問題與您的代碼。

首先,循環迭代有點奇怪。您正在循環每個projectdata$cDate的每個元素HolidayDate$Date,並將projectdata$IsHoliday設置爲TRUE或FALSE。問題是你沒有說哪個元素是TRUE或FALSE,所以你每次都將while列設置爲true或false。您可能會以具有全部TRUE或全部爲FALSE的列結束。 break也是不必要的。其次,一般來說,避免使用循環有利於R中的矢量化是一種很好的做法。很多R函數都是矢量化的 - 我們可以在矢量(即數字序列)上調用它們並獲得合理的輸出。 %in%在這種情況下比==好得多,因爲==做了一個一個的比較,而%in%搜索一個到所有。

+0

Wow..amazing.that工作的優勢!非常感謝。真的開始欣賞河的力量。 –

-1

另一種解決方案是做

library(dplyr) 

result = 
    HolidayData %>% 
    mutate(IsHoliday = TRUE) %>% 
    right_join(Project_Data) %>% 
    mutate(IsHoliday = IsHoliday %in% TRUE) 

這有讓你連接表,用以做其他操作,如果你想

相關問題