我有一个已读入的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
答案 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
,则还需要指定.csv
和sep=','
:
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
(这是一个非常烦人的默认值)。