【问题标题】:How to subset the first column (rownames) in R [duplicate]如何对R中的第一列(行名)进行子集化
【发布时间】:2019-04-09 15:12:01
【问题描述】:

我有多个样本中基因表达的 xy 数据。我希望对第一列进行子集化,以便按字母顺序对基因进行排序并执行其他过滤。

> setwd("C:/Users/Will/Desktop/BIOL3063/R code assignment");
> df = read.csv('R-assignments-dataset.csv', stringsAsFactors = FALSE);

Here is a simplified example of the dataset I'm working with, it has 270 columns (tissue samples) and 7065 rows (gene names).

第一列是基因名称列表(A2M、AAAS、AACS 等),每一列是不同的组织样本,从而显示每个组织样本中的基因表达。

提出的问题是“按字母顺序 (A-Z) 对基因名称进行排序并打印出前 20 个基因名称”

我的想法是对第一列(基因名称)进行子集化,然后执行 order() 按字母顺序排序,之后我可以使用 head() 打印前 20 个。

但是当我尝试时

> genes <- df[1]

它只是子集包含数据的第一列 (TCGA-A6-2672_TissueA) 而不是其左侧的列。

还有

> genes <- df[,df$col1];
> genes;
data frame with 0 columns and 7065 rows
> order(genes);
integer(0)

似乎在 R Studio 的查看器中创建了一个基因名称列表,但我无法对其执行任何操作。

我无法正确定位 data.frame 中的第一列,因为它没有列标题,并且在对第 1 行(示例名称)执行相同操作时,我也遇到了同样的问题。

我是 R 的新手,这是我正在处理的任务的一部分,我似乎遗漏了一些基本的东西,但我不知道是什么。

大家好

【问题讨论】:

  • 那么这里想要的结果到底是什么?您是否试图提取以“A2M|2”开头的值?当第一列没有标题时,R 会将它们作为行名读取。试试看rownames(df)

标签: r sorting dataframe bioinformatics


【解决方案1】:

请将您的文本文件示例作为文本而不是图像。


我已经创建了一个类似于你的数据集:

    X   Y
1   a   b
2   c   d
3   d   g

请注意,您的组织列有一个标题,但您的基因名称没有。因此,这些将被解释为行名,请参阅?read.table

如果没有指定 row.names 并且标题行少了一个条目 比列数,第一列被视为行 名字。

在 R 中阅读它:

df <- read.table(text = '   X   Y
1   a   b
2   c   d
3   d   g')

所以你的基因名称不在df[1],而是在rownames(df),所以要获得这些genes &lt;- rownames(df)或将这些添加到现有的df中,你可以使用df$gene &lt;- rownames(df)

有多种方法可以将行名转换为列,例如question

【讨论】:

  • 谢谢!问题是我找不到我的基因名称,所以使用genes &lt;- rownames(df) 产生了我正在寻找的结果。
  • 很高兴我能帮上忙,现在你必须看看?order,就像这样:sorted.genes &lt;- genes[order(genes)] 并获得前 20 名:top.20 &lt;- head(sorted.genes, 20)@WillFinch
【解决方案2】:

如果您在问我认为您在问什么,您只需要在 as.data.frame 函数内进行子集化,它会自动生成一个“标题”,正如您所说的那样。它将被称为 V1,这是您的新数据框的第一个变量。

genes <- as.data.frame(df[,1])
genes$V1
1 A
2 C
3 A
4 B
5 C
6 D
7 A
8 B

根据下面的评论,如果您从子集语法中删除逗号,则可以避免该问题。当您从data.frame 中选择列时,您只需索引列,而不是行。

genes <- df[1]

【讨论】:

  • 不同之处在于原始海报的子集语法。如果您使用df[,1] 进行子集化,则返回一个向量(df 第一列的向量化版本)。如果您致电df[1],则可以避免此问题。我只是在回答被问到的问题。
  • 我遇到的问题是这两行代码genes &lt;- as.data.frame(df[,1])genes &lt;- df[1] 子集了我打算子集的列右侧的列。我打算对第一列中的基因名称进行子集化,而不是第二列中的数值。为了清楚起见,我已经编辑了我的原始帖子,谢谢。
  • 啊,我明白了。我最初误解了你的问题。您想使用 rownames 函数提取行名
猜你喜欢
  • 1970-01-01
  • 2021-04-29
  • 1970-01-01
  • 1970-01-01
  • 2020-09-25
  • 1970-01-01
  • 1970-01-01
  • 2018-02-01
相关资源
最近更新 更多