【问题标题】:How do I see a content of a specific cell in a tibble?如何在 tibble 中查看特定单元格的内容?
【发布时间】:2019-02-22 23:10:22
【问题描述】:

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

错误:无法使用类函数对象将[ 子集化。

【问题讨论】:

  • 您需要指定一个存在的行名。我怀疑是否有任何行名是“行名”。
  • 您还应该知道,根据 tidyverse 的固执己见,小标题的要点之一是它们在很多时候会剥离行名。使用[ 进行子集化会删除行名,as_tibble 默认情况下也会删除行名,请参阅documentation here
  • 通常错误会有所不同,但您确定您的数据名为df,并且您没有使用函数 df吗? (通常这种情况下的错误是“'closure'类型的对象不是子集的”,但提到“类函数”让我思考。)

标签: r tibble


【解决方案1】:

使用 tibble 时,'[' 返回另一个 tibble。要子集,请尝试'[['或'$':

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

=============已更新[根据请求说明===========

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

但是,让我们看看这是否能让你到达你想要的地方。

iris 数据创建虚拟数据:

> df_1<-iris[1:10,]

添加行名称:

> 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”进行过滤,然后选择返回单个值 (1.4) 的列“Petal.Length”

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

【讨论】:

  • 感谢您的回答,但似乎我没有写好我想要的东西。在您的最后一个示例中,我想通过命令获取值“Row1B”,该命令不包含数字,而是包含“row_name”的字符串,类似于get_the_value[df, "row_name" = "Row B"],它必须输出“Row1B”
  • 是否打算通过调用 RowName 和 ColName 而不是索引来定位特定值?根据您的示例,如果您使用类似“[df,”row_name”=“Row B] 的查询(*这不是 R 中的逻辑命令),它将返回整行。但是,我相信您只需要一个值.. 我认为我们可以使用 dplyr 到达那里!稍后我会发布一个编辑供您试用:-)。
  • @AlexanderIvanov 已更新,如果这是您想要完成的,请告诉我。
猜你喜欢
  • 2017-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多