Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 根据模式选择行名称_R_Dataframe_Row - Fatal编程技术网

R 根据模式选择行名称

R 根据模式选择行名称,r,dataframe,row,R,Dataframe,Row,有没有更好的方法选择以某物开头的行名? 前 *实际数据帧有8000行。 以下两个选项有效: df[substr(rownames(df),1,3)=='C12',] 或 我想要 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

有没有更好的方法选择以某物开头的行名?

*实际数据帧有8000行。
以下两个选项有效:

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

我想要

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%’”

为什么你不喜欢你的方法,你说的“更好”是什么意思?更精确的语法还是更快

dplyr
也可以这样做,但实际上更复杂,因为我认为需要将行名转换为显式变量

library(dplyr)
a <- data.frame(a=(1:4), row.names=c("C12","CC12", "C1","12"))

tbl_df(cbind(a=a, b=rownames(a)))%>%
     filter(grepl("^C12", b))
库(dplyr)
a%
过滤器(灰色(“^C12”,b))
我不建议这样做,但是


您给出的示例代码实际有效吗?我想你需要一个
which
,例如
df[which(substr(rownames(df),1,3)='C12'),]
不需要
which()
,因为
[
也适用于逻辑变量。前两次尝试应该可以正常工作。您不需要为行名定义额外的列。但在您的示例中,如果不定义,您将遇到麻烦,因为其中一列与数据帧同名。因此:
过滤器(a,grepl(^C12),行名(a)))
不起作用,因为在
rownames(a)
中,
a
被解释为数据框
a
中的列
a
。但是如果你调用数据框,比如说,
df
,这将起作用:
过滤器(df,grepl(^C12),rownames(df))
。是的,一个更简洁的代码。在SQL中有“like'C12%”。会这样吗“干预”[]功能,结果不可预测?无论如何,这是一种很好的、未知的定义函数的方法。@Alex非常正确,我已经更新了一个更好的版本为什么函数不能有其他名称,如“[~”@rawr@Alex一个过于简单的解释(部分原因是我不是专家)是执行时,比如说
[~
,解析将其解释为两个字符。您当然可以定义一个名为
[~
的函数,但必须像
`[~`(df,i)那样调用它
这不是您想要的。r还允许您定义运算符,尽管这并不完全是您想要的,但它是另一种奇怪的函数定义和类@rawr!在rTks中调用函数的方式,我喜欢
[~(df,I)
:)
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    
library(dplyr)
a <- data.frame(a=(1:4), row.names=c("C12","CC12", "C1","12"))

tbl_df(cbind(a=a, b=rownames(a)))%>%
     filter(grepl("^C12", b))
`[.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')