如何从data.frame获得平均值?

时间:2015-06-13 07:28:20

标签: xml r dataframe

我有一个data.frame,我从中得到了:     data <- ldply(xmlToList("http://www.nbp.pl/kursy/xml/a025z100205.xml"),data.frame)

我创建了一个这样的列表:

list <- data[[6]]

然后我删除了NA值

list <- list[!is.na(list)]

我得到了这个

[1] 0,0900 2,9915 2,5851 0,3850 2,7805 2,0566 2,1043 4,0921 1,4918 2,7837
[11] 4,7009 0,3723 3,3450 0,1561 0,5496 0,2615 2,3211 0,4987 0,4005 0,5589
[21] 0,9894 2,0923 1,9688 1,1851 5,7733 0,0643 0,2271 0,3884 1,5965 0,8687
[31] 0,0981 3,1673 0,2557 0,4384 4,5657
35 Levels: 0,0900 2,9915 2,5851 0,3850 2,7805 2,0566 2,1043 4,0921 ... 4,5657

但我无法从这份名单中得到平均值。这是因为水平?我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:3)

由于非数字组件(class),{list}的factor,。当列中存在非数字元素时,通过创建data.frame,默认选项为stringsAsFactors=TRUE。我们可以在stringsAsFactors=FALSE中包含参数data.frame以获取字符列,但仍应替换,。假设它是用于十进制的,我们使用.将其替换为sub,使用numeric转换为as.numeric并获取mean

mean(as.numeric(sub(',', '.', list)))

修改

使用OP的代码读取数据后,我知道第4和第6列是数字的(但所有列都是'factor'类)。如果您只对第6列感兴趣,请执行上述操作,但如果您需要获得第4和第6列的mean,请使用sapply

 sapply(data[c(4,6)], function(x) 
       mean(as.numeric(sub(',', '.', x)), na.rm=TRUE))
 #przelicznik kurs_sredni 
 #298.00000     1.66298 

或者

m1 <-  `dim<-`(as.numeric(sub(',', '.', as.matrix(data[c(4,6)]))), 
                dim(data[c(4,6)]))
colMeans(m1, na.rm=TRUE)
#[1] 298.00000   1.66298

注意:最好不要使用函数名称命名对象。