2017-06-15 32 views
0

列表中的一個元素,我想檢查我的data_frame_1的至少一個元素是data_frame_2並添加它像一個新列檢查如果字符串包含有R

我的代碼:

library(data.table) 

object_to_check <- data.table(c('aaax', 'bbbx', 'cccy', 'dddk', 'mmmt')) 
colnames(object_to_check) <- 'x' 
list_of_element <- data.table(c('ax', 'kh', 'dk')) 
colnames(list_of_element) <- 'y' 

Fun2 <- function(element_to_find, string_to_check) { 
    element_to_find <- '0' 
     if (element_to_find == '0') { 
     for (i in 1:length(list_of_element)) { 
      m <- lista[i] 
      element_to_find <- ifelse(grepl(m, string_to_check, ignore.case = T) == T,string_to_check,'') 
     } 
     } 
    } 

object_to_check <- object_to_check[, check := Fun2(check, x)] 

我的代碼給我這個錯誤:

Warning message: 
In `[.data.table`(object_to_check, , `:=`(check, Fun2(check, x))) : 
Adding new column 'check' then assigning NULL (deleting it). 

我卡在這個錯誤,我無法找到我的問題的解決方案。同一個人能幫助我嗎?

所需的輸出:

x check 
aaax ax 
bbbx NA 
cccx NA 
dddk dk 
mmmt NA 

感謝

+0

https://stackoverflow.com/questions/3171426/compare-two-data-frames-to-find-the-rows-in-data-frame-1-that-are -not-present-in – Freak

+0

請根據示例 – akrun

回答

1

你可以像下面這樣做

> df1 <- data.frame(row.names=1:4, var1=c(TRUE, TRUE, FALSE, FALSE), var2=c(1,2,3,4)) 
> df2 <- data.frame(row.names=5:7, var1=c(FALSE, TRUE, FALSE), var2=c(5,2,3)) 
> df1 
    var1 var2 
1 TRUE 1 
2 TRUE 2 
3 FALSE 3 
4 FALSE 4 
> df2 
    var1 var2 
5 FALSE 5 
6 TRUE 2 
7 FALSE 3 

也有一些其他的最簡單的方法也是可用的。你可以使用all.equal(target, current, ...)函數。它不排序數據幀。 另一種方法是使用identical()功能

+0

顯示您的預期輸出謝謝但我必須檢查df2中的字符串是否包含在較大的df1字符串中。相同無法解決我的問題,我必須使用正則表達式來檢查string_df2是否在string_df1中 –