作者y325178 (路只要一條就夠了>_<)
看板Statistics
標題[問題] 請教R subset相關問題
時間Tue Jun 4 00:08:58 2013
Filename Label seg_Start seg_End
2frf-d-h-3-1st.mat "b" 192.794 335.000
2frf-d-h-3-1st.mat "s" 335.000 437.046
2frf-d-h-3-1st.mat "a" 437.046 535.000
2frf-l-hh-2-1st.mat "a" 278.422 405.000
2frf-l-hh-2-1st.mat "s" 405.000 494.306
2frf-l-hh-2-1st.mat "iu" 494.306 595.000
2frf-l-hh-3-1st.mat "a" 185.080 345.000
query <-read.table(...)
first_query <- subset(query, query$Label == "a" |
query$Label == "s"|
query$Label == "iu")
我之前這種寫法是把lebel是"a","s","iu"的列全部抓出來,
想請問各位有沒有一種寫法是可以指定要"a","s","iu"這三個連續的
a,s,iu的列才抓出來,
或是有沒有那種可以在select條件裡,
可以判斷目前指定到的列中 上或下一列元素的寫法??
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.121.76
※ 編輯: y325178 來自: 140.113.121.76 (06/04 00:22)
1F:→ andrew43:用for loop抓取. 06/04 02:15
2F:→ diplazium:我想到的是用regular expression方式來做,步驟如下: 06/04 14:02
3F:→ diplazium:先把Label串成單一字串 test <- paste(query$Label, 06/04 14:04
4F:→ diplazium:collapse="") 06/04 14:05
5F:→ diplazium:再找出有"asiu"連續字符的啟始位置, 06/04 14:05
6F:→ diplazium:test2 <- gregexpr("asiu", test) 06/04 14:06
7F:→ diplazium:這個test2所比對到的"起始位置"就是你要找的連續列的 06/04 14:08
8F:→ diplazium:開始列數囉 06/04 14:09
9F:→ diplazium:現在才想到,這個方法只能用在每一個Label只有一個字元的 06/04 17:13
10F:→ diplazium:情形,像"iu"這種的就會讓test2無法反映出正確的列數. 06/04 17:14
11F:→ diplazium:只能請版上高手再想想其他方法囉...... 06/04 17:15
12F:推 blackalert:我的想法是... 06/04 20:56
13F:→ blackalert:l1 <- query$Label 06/04 20:56
14F:→ blackalert:l2 <- query$Label[-1] 06/04 20:56
15F:→ blackalert:l3 <- query$Label[-(1:2)] 06/04 20:57
16F:→ blackalert:which(l1=="a" & l2=="s" & l3=="iu") 為所求的起始列 06/04 20:58
17F:推 diplazium:原來還可以這麼解決,black大真強! 06/04 21:22
18F:推 lin15:d大的方法可以先轉成可以用的字串就沒問題了 06/04 21:39