我尝试df["row_name", 2]
来获取位于“ row_name”行和第二列的单元格,但是有错误
错误:无法使用类函数的对象与
[
进行子集化。
答案 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
另一个选项。您可以结合使用filter
和select
。在此示例中,我告诉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