根据模式选择行名称

时间:2016-03-09 18:51:53

标签: r dataframe row

有没有更好的方法来选择以某些东西开头的rownames? 防爆。

df  
         k1   k2    p1   p2    l     perda      lP      lucroVar  
C16-C12  6.02 12.12 5.35 0.48  4.87 -1.23       3.96    79.84  
C47-C12  6.62 12.12 4.63 0.48  4.15 -1.35       3.07    75.45  
C7-C12   7.02 12.12 4.30 0.48  3.82 -1.28       2.98    74.90  
C21-C12  7.12 12.12 4.19 0.48  3.71 -1.29       2.88    74.20  
C12-C13 12.12 13.12 0.48 0.24  0.24 -0.76       0.32    24.00  
C12-C43 12.12 13.62 0.48 0.16  0.32 -1.18       0.27    21.33  

*真实数据框有8000行 以下两个选项有效:

df[substr(rownames(df),1,3)=='C12',]  

df[grep('^C12',rownames(df)),]  

我想

df['C12*',]  
         k1   k2    p1   p2    l     perda      lP      lucroVar 
C12-C13 12.12 13.12 0.48 0.24  0.24 -0.76       0.32    24.00  
C12-C43 12.12 13.62 0.48 0.16  0.32 -1.18       0.27    21.33    

在SQL中有“喜欢'C12%'”。

2 个答案:

答案 0 :(得分:2)

不是我建议这样做但是......

`[.data.frame` <- function(x, i, ...) {
  base::`[.data.frame`(x, if (is.character(i)) grepl(i, rownames(x)) else i, ...)
}

letters[1]
# [1] "a"

mtcars[1, ]
#           mpg cyl disp  hp drat   wt  qsec vs am gear carb
# Mazda RX4  21   6  160 110  3.9 2.62 16.46  0  1    4    4

mtcars['M', ]
#                mpg cyl  disp  hp drat    wt  qsec vs am gear carb
# Mazda RX4     21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
# Mazda RX4 Wag 21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
# Merc 240D     24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
# Merc 230      22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
# Merc 280      19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
# Merc 280C     17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
# Merc 450SE    16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
# Merc 450SL    17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
# Merc 450SLC   15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
# AMC Javelin   15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
# Maserati Bora 15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8

并恢复正常

rm('[', '[.data.frame')

答案 1 :(得分:0)

为什么你不喜欢你的方法,你的意思是什么?更好的&#34;?更复杂的语法还是更快?

messengerService.Publish<GaEventMessage>(new GaEventMessage(this, "Event", "Publish Event", "Publish Event From First View Model", 123)); 也可以这样做,但实际上更复杂,因为我认为你需要将rownames转换为显式变量

dplyr