[問題] 請教R subset相關問題

看板Statistics作者 (路只要一條就夠了>_<)時間12年前 (2013/06/04 00:09), 編輯推噓3(3015)
留言18則, 4人參與, 最新討論串1/1
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)

06/04 02:15, , 1F
用for loop抓取.
06/04 02:15, 1F

06/04 14:02, , 2F
我想到的是用regular expression方式來做,步驟如下:
06/04 14:02, 2F

06/04 14:04, , 3F
先把Label串成單一字串 test <- paste(query$Label,
06/04 14:04, 3F

06/04 14:05, , 4F
collapse="")
06/04 14:05, 4F

06/04 14:05, , 5F
再找出有"asiu"連續字符的啟始位置,
06/04 14:05, 5F

06/04 14:06, , 6F
test2 <- gregexpr("asiu", test)
06/04 14:06, 6F

06/04 14:08, , 7F
這個test2所比對到的"起始位置"就是你要找的連續列的
06/04 14:08, 7F

06/04 14:09, , 8F
開始列數囉
06/04 14:09, 8F

06/04 17:13, , 9F
現在才想到,這個方法只能用在每一個Label只有一個字元的
06/04 17:13, 9F

06/04 17:14, , 10F
情形,像"iu"這種的就會讓test2無法反映出正確的列數.
06/04 17:14, 10F

06/04 17:15, , 11F
只能請版上高手再想想其他方法囉......
06/04 17:15, 11F

06/04 20:56, , 12F
我的想法是...
06/04 20:56, 12F

06/04 20:56, , 13F
l1 <- query$Label
06/04 20:56, 13F

06/04 20:56, , 14F
l2 <- query$Label[-1]
06/04 20:56, 14F

06/04 20:57, , 15F
l3 <- query$Label[-(1:2)]
06/04 20:57, 15F

06/04 20:58, , 16F
which(l1=="a" & l2=="s" & l3=="iu") 為所求的起始列
06/04 20:58, 16F

06/04 21:22, , 17F
原來還可以這麼解決,black大真強!
06/04 21:22, 17F

06/04 21:39, , 18F
d大的方法可以先轉成可以用的字串就沒問題了
06/04 21:39, 18F
文章代碼(AID): #1HhB-TG6 (Statistics)