R,rowMean按data.frame中的列

时间:2018-08-17 00:20:02

标签: r

我有一个已读入的csv,现在是R中的data.frame。我的文件名为MyRData007。我的标题信息一直持续到第5行(主列标题位于第4行)。我的ID在A列中。我只需要为每个ID创建两个单独的rowMeans。数据在第5-147行中。第一个意思是第4-15列;第二个意思是第6-21列。最终,我应该为143行中的每行都添加一个平均值。这是我尝试过的:

> mRNA<-rowMeans(MyRData007)[5:147,(4:15)]
> Protein<-rowMeans(MyRData007)[5:147,(16:21)]

但是我得到一个错误吗?

Error in rowMeans(MyRData007) : 'x' must be numeric

1 个答案:

答案 0 :(得分:3)

Traceback (most recent call last):
  File "python", line 15, in <module>
TypeError: list indices must be integers or slices, not str

因此,当您尝试致电df <- read.table(text='this is a header this is another header this too is one and this is also id code status value 1 2 3 4 2 32 43 23 3 3 43 32 4 232 323 55') df V1 V2 V3 V4 1 this is a header 2 this is another header 3 this too is one 4 and this is also 5 id code status value 6 1 2 3 4 7 2 32 43 23 8 3 3 43 32 9 4 232 323 55 时会收到错误消息:

rowMeans

之所以会出现此错误,是因为您试图获取非数字值的平均值,这没有任何意义。尝试对数据进行子集化的尝试无效,因为将括号放在对rowMeans(df) Error in rowMeans(df) : 'x' must be numeric 的调用之外,这告诉它对rowMeans的输出进行子集化,而不是对输入的数据进行子集化。

基本问题是,R rowMeans中不能包含标题信息。数据框的一列中的所有数据都必须为同一类型,因此,如果某些行中包含字符,则其他行中不能包含数字。

如何解决此问题?

使用data.frame参数用read.table读入数据。这将使其跳过标题信息行,以仅包含您的数据来生成数据帧。如果文件是skip = 4,则还需要指定.csvsep=','

header=T

df2 <- read.table(text='this is a header this is another header this too is one and this is also id code status value 1 2 3 4 2 32 43 23 3 3 43 32 4 232 323 55', skip = 4, header = T) rowMeans(df2) [1] 2.50 25.00 20.25 153.50 只是read.csv的包装器,其使用与使用read.table并具有以下选项的包装器相同:

read.table

通常,最好使用read.table(file, header = TRUE, sep = ",", fill = TRUE) ,因为它可以为您提供更多控制权。最重要的示例是设置read.table以防止将字符串转换为stringsAsFactors = FALSE(这是一个非常烦人的默认值)。