2017-01-03 51 views
1

我有一個CSV文件,其中兩列包含一個或多個整數每個單元格。從LookUp-Table/CSV文件中創建向量R

df <- data.frame(x=c("a","b","a","b"), 
y=c("datatype 1","datatype 1","datatype 2", "datatype 2"), 
z=c("2,3", "1,2","1,2,3,4,5", "3")) 

names(df) <- c("hypothesis", "type", "mass") 

> df 
    hypothesis  type  mass 
1   a datatype 1  2,3 
2   b datatype 1  1,2 
3   a datatype 2 1,2,3,4,5 
4   b datatype 2   3 

我想提取從該.csv作爲載體的整數,並將其分配給變量x(數據類型1,假設a)和y(數據類型2,假設一)在我的代碼。

現在,我使用subset通過「數據類型」(第2列)和which(「假設」/第1列)過濾表以獲得我需要的相應「質量」值。在下一步我想用intersect找出哪些元素是由xy變量共享的。

我的問題是,我怎樣才能得到一個像「1,2,3」一樣的.csv單元格內容到vectorintersect函數適用於哪一個?

當我剛打電話時,我得到typeofinteger,並且當應用intersect時,結果爲character(0)。當我手動分配x <- c(1,2,3,4,5); y <- c(2,3)結果 - 因爲它應該是 - 2 3

+0

圖像不代碼或數據,除非它是圖像處理相關的。請儘量尊重那些在網站上回答的人,並按照提供的鏈接中顯示的指導方針http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example你在R標籤中發佈問題時。 R標籤現在幾乎以流行比例使用圖像數據或代碼。 – hrbrmstr

+0

我的道歉,我編輯了這篇文章,希望它現在可以複製和達到標準。 – Ezra

回答

0

我們可以通過在「類型」 split「大衆」,分裂使用strsplitunlist字符串,轉換爲numeric,得到了unique元素和應用intersect發現是整個list元素共同的元素

lst <- setNames(lapply(split(df$mass, df$type), function(x) 
     sort(unique(as.numeric(unlist(strsplit(as.character(x), ",")))))), c("x", "y")) 

Reduce(intersect, lst) 
+0

謝謝你akrun。我嘗試了部分建議的代碼:我的數據如下所示:'> x [[1]] [1] 2,3 級別:1 1,2 1,2,3,4,5 2 2,3 2,3,4,5 3 3,4,5 4 5'我用你的代碼:'a < - as.numeric(unlist(strsplit(as.character(x),「,」)))'and the result是:'> a [1] 6'。我是否需要爲我的數據框中的列分配不同的數據類型?我真的只需要一個元素的向量,我想在不同的步驟中應用相交(在我正在寫的函數中,我有4個需要相互交叉的變量)。任何想法,我做錯了什麼? – Ezra

+0

@Ezra如果你需要4個變量相交,最好把它保存爲一個'list'(如我所示,然後使用'Reduce'而不是在全局環境中創建單個對象 – akrun

+0

@Ezra關於你的對象'x ',它是一個'list'或'vector'?如果它是一個'list',那麼'strsplit(as.character(unlist(x)),「,」)' – akrun