我如何在小标题中看到特定单元格的内容?

时间:2019-02-22 23:10:23

标签: r tibble

我尝试df["row_name", 2]来获取位于“ row_name”行和第二列的单元格,但是有错误

  

错误:无法使用类函数的对象与[进行子集化。

1 个答案:

答案 0 :(得分:0)

使用小标题时,‘[’返回另一个小标题。要子集化,请尝试“ [[”或“ $”:

df2 <- tibble(x = 1:3, y = 3:1)
class(df2$x)
#> [1] "integer"

例如:

my.tibble<-tibble(x=c('Jack','Jill','Bill'),
              y=c('Fell','Stood','Slipped')
              )
> my.tibble
# A tibble: 3 x 2
  x     y      
  <chr> <chr>  
1 Jack  Fell   
2 Jill  Stood  
3 Bill  Slipped
> my.tibble[2,2]
# A tibble: 1 x 1
  y    
  <chr>
1 Stood

同样...

> my.tibble$x[2]
[1] "Jill"

my.df<-tibble('row_name' = c('Row A','Row B','Row C'),
              'other_rows' = c('Row 1A', 'Row1B', 'Row1C'))

> my.df$row_name[2]
[1] "Row B"

请参见https://cran.r-project.org/web/packages/tibble/vignettes/tibble.html

=============已更新[基于请求澄清===========

从文档[here](https://www.rdocumentation.org/packages/tibble/versions/1.4.2/topics/rownames)中,“在使用[运算符进行子集设置时被删除”。

但是,让我们看看是否能将您带到想要的地方。

根据iris数据创建伪数据:

> df_1<-iris[1:10,]

添加row.names:

> row.names(df_1)<-c('Obs1','Obs2','Obs3','Obs4','Obs5','Obs6','Obs7','Obs8','Obs9','Obs10')

转换为小标题:

library(tibble) 
> df_1 <- as_tibble(rownames_to_column(df_1))

> head(df_1)
# A tibble: 6 x 6
  rowname Sepal.Length Sepal.Width Petal.Length Petal.Width Species
  <chr>          <dbl>       <dbl>        <dbl>       <dbl> <fct>  
1 Obs1             5.1         3.5          1.4         0.2 setosa 
2 Obs2             4.9         3            1.4         0.2 setosa 
3 Obs3             4.7         3.2          1.3         0.2 setosa 
4 Obs4             4.6         3.1          1.5         0.2 setosa 
5 Obs5             5           3.6          1.4         0.2 setosa 
6 Obs6             5.4         3.9          1.7         0.4 setosa 

使用dplyr进行过滤:

库(dplyr)

> filter(df_1,rowname=="Obs1" & Petal.Length == 1.4)
# A tibble: 1 x 6
  rowname Sepal.Length Sepal.Width Petal.Length Petal.Width Species
  <chr>          <dbl>       <dbl>        <dbl>       <dbl> <fct>  
1 Obs1             5.1         3.5          1.4         0.2 setosa 

另一个选项。您可以结合使用filterselect。在此示例中,我告诉R首先按行名'Obs1'进行过滤,然后选择列'Petal.Length',该列返回单个值(1.4)

> filter(df_1,rowname=="Obs1") %>%
+   select(Petal.Length)
# A tibble: 1 x 1
  Petal.Length
         <dbl>
1          1.4