如何将单列DataFrame子集化并返回DataFrame?

时间:2018-04-03 20:46:15

标签: r dataframe

我有一个只有一列和rownames的DataFrame

 > head(UMIpCells_df, n=10)
                      UMIs
MB04_GATAACTGGCCT 4571.266
MB04_ACCCTGTCATTT 4534.992
MB04_GTAAGACGAATG 4793.417
MB04_AGGCTATTCCAA 4786.393
MB04_ATTATCTGATTT 4478.233
MB04_CCCGGGTCTGCC 4765.347
MB04_AAACGAGCTGAC 4571.253
MB04_TGTTGCTTTTCG 4167.119
MB04_ACGTCCCCCAAA 4778.961
MB04_GTCGCGCAGTTC 4664.638

我希望将第1行分配为5行,但我得到了一个数字向量:

> UMIpCells_df[1:5,]
[1] 4571.266 4534.992 4793.417 4786.393 4478.233

但是,如果我向UMIpCell_df添加一个额外的列,则该子集返回一个df。 我发现要从单列数据帧返回一个df,我必须添加:  drop = False

> UMIpCells_df[(1:5), ,drop=FALSE]
                      UMIs
MB04_GATAACTGGCCT 4571.266
MB04_ACCCTGTCATTT 4534.992
MB04_GTAAGACGAATG 4793.417
MB04_AGGCTATTCCAA 4786.393
MB04_ATTATCTGATTT 4478.233

然而,我发现这个奇怪且基本的,因为它是我想要了解为什么最简单的df(仅1列)的子集必须与任何其他DataFrame(> 1列)的子集不同。希望你不要被这个问题的基础所冒犯。

2 个答案:

答案 0 :(得分:0)

考虑使用tibbles和data_frame而不是标准的data.frame。虽然不是基础R,但dplyr这样的包有助于“纠正”您注意到的某些行为,这些行为可能不再有用。

点击这里的小插图: https://cran.r-project.org/web/packages/tibble/vignettes/tibble.html

这里是对数据帧的简单比较以及子集化时的一些比较: http://r4ds.had.co.nz/introduction-2.html#tibbles

答案 1 :(得分:0)

head(UMIpCells_df, n=5)也是一个数据框,所以您可以这样做:

new.df <- head(UMIpCells_df, n=5)