我有一个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
但我无法从这份名单中得到平均值。这是因为水平?我怎样才能做到这一点?
答案 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
注意:最好不要使用函数名称命名对象。