使用plyr在数据框中舍入多个向量

时间:2014-01-24 08:41:48

标签: r plyr

此data.frame中的数字四舍五入到小数点后3位:

habitats_df <- data.frame(habitat = c("beach", "grassland", "freshwater"), v1 = c(0.000, 0.670, 0.032), v2 = c(0.005, 0.824, 0.012))

     habitat    v1    v2
1      beach 0.000 0.005
2  grassland 0.670 0.824
3 freshwater 0.032 0.012

我需要将它们四舍五入到小数点后两位。我试图像这样使用plyr::l_ply

library(plyr)
l_ply(habitats_df[,2:3], function(x) round(x, 2))

但它没有用。如何使用plyr:: l_plyhabitats_df中的数字进行舍入?

2 个答案:

答案 0 :(得分:4)

你真的不需要plyr,因为简单的lapplyround相结合就可以了。我在基数R和plyr

中提供了一个解决方案

在基础R中尝试:

roundIfNumeric <- function(x, n=1)if(is.numeric(x)) round(x, n) else x

as.data.frame(
  lapply(habitats_df, roundIfNumeric, 2)
)

     habitat   v1   v2
1      beach 0.00 0.00
2  grassland 0.67 0.82
3 freshwater 0.03 0.01

plyr相同:

library(plyr)
quickdf(llply(habitats_df, roundIfNumeric, 2))

     habitat   v1   v2
1      beach 0.00 0.00
2  grassland 0.67 0.82
3 freshwater 0.03 0.01

答案 1 :(得分:1)

# plyr alternative
library(plyr)
data.frame(habitat = habitats_df$habitat,
           numcolwise(.fun = function(x) round(x, 2))(habitats_df))

#      habitat   v1   v2
# 1      beach 0.00 0.00
# 2  grassland 0.67 0.82
# 3 freshwater 0.03 0.01

# base alternative
data.frame(habitat = habitats_df$habitat,
           lapply(habitats_df[ , -1], function(x) round(x, 2)))