我有多个样本中基因表达的xy数据。我希望将第一列作为子集,以便我可以按字母顺序对基因进行排序并进行其他过滤。
> setwd("C:/Users/Will/Desktop/BIOL3063/R code assignment");
> df = read.csv('R-assignments-dataset.csv', stringsAsFactors = FALSE);
第一列是基因名称的列表(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的完全新手,这是我正在从事的作业的一部分,似乎我缺少一些基本知识,但我不知道要做什么。
干杯们
答案 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。