如何对R

时间:2019-04-09 15:12:01

标签: r sorting dataframe bioinformatics

我有多个样本中基因表达的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行(样本名称)执行相同操作时,我也遇到相同的问题。 / p>

我是R的完全新手,这是我正在从事的作业的一部分,似乎我缺少一些基本知识,但我不知道要做什么。

干杯们

2 个答案:

答案 0 :(得分:0)

如果您问的是我想问的问题,则只需要在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]

答案 1 :(得分:0)

请包含文本文件的示例作为文本而不是图像。


我创建了一个类似于您的数据集:

    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 <- rownames(df)或将其添加到现有df中,您可以使用df$gene <- rownames(df) < / p>

有多种方法可以将行名转换为列,例如参见此https://docs.microsoft.com/en-us/aspnet/core/security/authorization/limitingidentitybyscheme