此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_ply
对habitats_df
中的数字进行舍入?
答案 0 :(得分:4)
你真的不需要plyr
,因为简单的lapply
与round
相结合就可以了。我在基数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)))