2015-08-09 65 views
0

我有形式的data.frame:警告消息大约<NA>

Set_1  Set_2  Set_3  Set_4  Set_5  Set_6  Set_7 
1.42  0.98  <NA>  <NA>  0.98  2.91  0.40 
<NA>  1.11  1.23  1.54  1.99  <NA>  <NA> 
<NA>  1.02  0.99  <NA>  0.99  <NA>  1.00 
<NA>  <NA>  1.88  0.87  0.32  0.55  1.33 

我试图计算出超过2.0

我使用的代码percent <- colSums(df > 2.0, na.rm=TRUE)/colSums(!is.na(df))每列的百分比我不断收到警告信息:In Ops.factor(left, right) : > not meaningful for factors。我如何解决这个问题?

回答

2

您可以将列转换为numeric,然后用百分比

dat[] <- lapply(dat, function(x) as.numeric(as.character(x))) 
sapply(dat, function(x) sum(x>2, na.rm=T)/nrow(dat)) 

继续检查列类型一个有用的方法是

sapply(dat, class) 

此外,作为@RichardScriven指出的那样,你可以得到转换期间摆脱烦人的警告

dat[] <- suppressWarnings(lapply(dat, function(x) as.numeric(as.character(x)))) 
+0

当我用你的顶行'dat [] < - l apply(dat,as.numeric)'它将我的小数全部改变为整个不同magntidue的整数值整数。 – Evan

+0

@Evan是的,对不起,我没有测试过,正如RichardScriven指出的那样,你需要收敛因子 - >字符 - >数字 – jenesaisquoi

+0

太棒了,作品非常漂亮! – Evan