作者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