2017-07-11 42 views
0

我開始用DF,看起來像這樣:Dplyr選擇ENDS_WITH

sample_id  target_id length  eff_length est_counts tpm class 
1 SRR3884838C  (A)n  69   70   0  0.00000  0 
2 SRR3884838C  (AC)n  69   70   0  0.00000  0 
3 SRR3884838C  (AG)n  69   70   0  0.00000  0 
4 SRR3884838C  (AT)n  69   70   5  15.98870 0 

我想用dplyr的選擇功能,以便只選擇以字母C端sample_ids,還有target_id和TPM。

示例數據:

> dput(droplevels(head(te,4))) 
structure(list(sample_id = structure(c(1L, 1L, 1L, 1L), .Label = "SRR3884838C", class = "factor"), 
target_id = structure(1:4, .Label = c("(A)n", "(AC)n", "(AG)n", 
"(AT)n"), class = "factor"), length = c(69L, 69L, 69L, 69L 
), eff_length = c(70L, 70L, 70L, 70L), est_counts = c(0, 
0, 0, 5), tpm = c(0, 0, 0, 15.9887), class = c(0L, 0L, 0L, 
0L)), .Names = c("sample_id", "target_id", "length", "eff_length", 
"est_counts", "tpm", "class"), row.names = c(NA, 4L), class = "data.frame") 

我嘗試使用以下內容:

teC <- select(te, (sample_id, ends_with("C")), target_id, tpm) 

使我有sample_id,target_id和TPM,但不會只選擇sample_id的以C例如結尾:

 sample_id  target_id tpm 
9759 SRR3884843CxS Tigger15a 0.00000e+00 
9760 SRR3884843CxS Tigger16a 0.00000e+00 
9761 SRR3884843CxS Tigger16b 0.00000e+00 

我在做錯選擇?我能夠毫無問題地處理教程網站的示例數據。

+0

什麼時候'sample_id'會以'C'結尾?你能提供一個例子嗎? – CPak

+0

第一個代碼塊有一個以C結尾而不是我的其他結尾(例如CxS)的例子,這有意義嗎?如果我需要澄清更多,請讓我知道。 – ZincFingers

回答

2

select用於通過名稱保留變量(讀取:列),這就是您使用sample_id,target_idtmp所做的事情。如果您想進一步內sample_id值過濾,再加入filter

teC <- te %>% select(sample_id, target_id, tpm) %>% filter(grepl("C$", sample_id)) 

正則表達式"C$"將匹配以「C」結尾的字符串; "CxS$"將匹配以「CxS」結尾的字符串;和"(C|CxS)$"將匹配兩者。

+0

啊,我現在看到OP想要什麼...... – CPak

+0

所以我不能使用select來獲取像這樣的列中的特定名稱:https://www.r-bloggers.com/the-complete-catalog-of我想複製並粘貼你的答案,並得到錯誤 'filter_impl(.data,quo)中的錯誤: 評估錯誤:'nchar()'需要一個字符矢量' 我不熟悉使用%>%,所以我需要弄清楚。 – ZincFingers

+0

其實這是不正確的 - 「endswith」是'select'的一個「幫助」函數(用於獲取具有特定名稱的列) - 我將更新此答案以正確匹配'sample_id'中的字符串 – cmaher