Dataframe,Sum,Mean Help:如何求和矩阵?

时间:2013-02-26 21:31:04

标签: r sum dataframe mean

我需要解释数据框,总和和平均命令如果操作下面的代码,我可以获得数据文件列表Preplist。然而,由于某些错误,我需要解释的命令不起作用。

我的猜测是我加载的数据没有数据框,只有每个数据文件的数字列表。要对每个数据文件求和或取均值,我需要数据框。 (当我检查行数时,什么都没有,但是为NULL)。

我认为我需要为加载的数据(200x200矩阵)创建数据框,并且原始数据中也必须忽略第一行和第一行。

这是我的代码:

Prepfiles <- list.files(pattern=".csv")
Preplist <- lapply(Prepfiles, read.table, sep = '\t', 
                  na.string = '', header = TRUE, skip=1)
bigPreplist <- do.call(rbind, Preplist)

我需要一次加载数据,并绘制数据(将每三个数据文件加在一起,并绘制图表)。但是,我无法使用sum()

运行命令mean()Preplist[1:24]

我使用的是200乘200矩阵的全数字。有24个数据文件。另外我想在加载数据时保持200×200矩阵形式,但是如果我使用nrow(Preplist[1])编码,那么就没有行数可以在加载数据时保留相同的数据帧吗?或者我是否必须制作新的数据框?

以下是使用sum和mean命令得到的错误:

> nrow(Preplist)
NULL
> sum(Preplist[1])
Error in sum(Preplist[1]) : invalid 'type' (list) of argument
> mean(Preplist[1])
[1] NA
Warning message:
In mean.default(Preplist[1]) :
  argument is not numeric or logical: returning NA

1 个答案:

答案 0 :(得分:2)

此处查看[[[(同一页面)的帮助非常有用

引用相关部分(因为prepList是一个列表)

  

递归(类似列表)对象

     

索引[类似于原子向量并选择指定元素的列表。

     

两者[[和$选择列表中的单个元素。主要区别在于$不允许计算指数,而[[确实如此]。 x $ name相当于x [[“name”,exact = FALSE]]。此外,[[可以使用精确参数控制。

的部分匹配行为

所以,

prepList[1]

选择长度为1的列表。此列表的第一个元素是data.frame

preplist[[1]] 

将选择prepList的第一个元素,即您想要的data.frame。

话虽如此,我不确定你是否真的想要取data.frame的平均值或总和,你会想确保它们返回你想要的。

例如

prepList <- list(data.frame(a=1:5,b=2:6), data.frame(a=2:6,b=1:5))

# this will give a warning
mean(prepList[[1]])

## a b 
## 3 4 
## Warning message:
## mean(<data.frame>) is deprecated.
## Use colMeans() or sapply(*, mean) instead. 


## this will give a single number

sum(prepList[[1]])

## 35

如果您希望每个数据框的列均值为prepList或每列的总和,请使用colMeanscolSumslapply的嵌套版本用手段,

eg 
library(data.table)
rbindlist(lapply(prepList, function(x) lapply(x, mean)))

##    a b
## 1: 3 4
## 2: 4 3

或使用plyrldply

library(plyr)
 ldply(prepList, function(x) {sapply(x, mean)})

或限制自己使用数字列

使用plyr

ldply(prepList,  numcolwise(mean))

使用过滤器

rbindlist(lapply(prepList, function(x) lapply(Filter(is.numeric,x), mean)))