使用 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
另一种选择。您可以组合filter 和select。在此示例中,我告诉 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