将数据框中的所有数字列四舍五入为不同的位数
Rounding off all numeric columns in data frame to different numbers of digits
我有一个包含许多不同列的数据框 类,我在下面包含了一个非常简化的示例:
df <- data.frame( col1=c("mary", "john", "luke", "peter", "agnes", "anne", "july", "judy", "tina", "ben"),
col2=c(0.1111,0.3123,0.7875,0.6789,0.87862,0.37512,0.69875,0.1785,0.1777, 0.9999),
col3=c(0.1111,0.3123,0.7875,0.6789,0.87862,0.37512,0.69875,0.1785,0.1777, 0.9999),
col3=c(124.6, 763.8, 222.9, 765.0, 564.7, 761.8, 683.9, 655.9, 897.3, 566.1))
我想四舍五入所有数字列,但取不同的值。例如:col2 和 col3 应四舍五入为 2 位数,col4 应四舍五入为 0 位数。
我想出的代码风格是这样的:
df2 <- df %>% mutate_at(2, round, 2)
df3 <- df2 %>% mutate_at(3, round, 2)
df4 <- df3 %>% mutate_at(4, round, 0)
如果我每次都没有将值分配给新的数据框,它就不会将值保存到我的数据框中。
例如,如果我这样做:
df %>% mutate_at(2, round, 2)
df %>% mutate_at(3, round, 2)
df %>% mutate_at(4, round, 0)
它将所需的输出写到控制台,但不将其保存到 df。我想知道是否有更优雅、更直观的方法来做到这一点?
您可以继续使用管道运算符将代码连接在一起。
df <- df %>%
mutate_at(c(2, 3), round, 2) %>%
mutate_at(4, round, 0)
_at
、_all
、_if
变体现在被 across
取代,它还允许您在同一个 mutate
管道中输入多个操作。
library(dplyr)
df <- df %>%
mutate(across(2:3, round, 2),
across(4, round, 0))
df
# col1 col2 col3 col3.1
#1 mary 0.11 0.11 125
#2 john 0.31 0.31 764
#3 luke 0.79 0.79 223
#4 peter 0.68 0.68 765
#5 agnes 0.88 0.88 565
#6 anne 0.38 0.38 762
#7 july 0.70 0.70 684
#8 judy 0.18 0.18 656
#9 tina 0.18 0.18 897
#10 ben 1.00 1.00 566
我有一个包含许多不同列的数据框 类,我在下面包含了一个非常简化的示例:
df <- data.frame( col1=c("mary", "john", "luke", "peter", "agnes", "anne", "july", "judy", "tina", "ben"),
col2=c(0.1111,0.3123,0.7875,0.6789,0.87862,0.37512,0.69875,0.1785,0.1777, 0.9999),
col3=c(0.1111,0.3123,0.7875,0.6789,0.87862,0.37512,0.69875,0.1785,0.1777, 0.9999),
col3=c(124.6, 763.8, 222.9, 765.0, 564.7, 761.8, 683.9, 655.9, 897.3, 566.1))
我想四舍五入所有数字列,但取不同的值。例如:col2 和 col3 应四舍五入为 2 位数,col4 应四舍五入为 0 位数。
我想出的代码风格是这样的:
df2 <- df %>% mutate_at(2, round, 2)
df3 <- df2 %>% mutate_at(3, round, 2)
df4 <- df3 %>% mutate_at(4, round, 0)
如果我每次都没有将值分配给新的数据框,它就不会将值保存到我的数据框中。 例如,如果我这样做:
df %>% mutate_at(2, round, 2)
df %>% mutate_at(3, round, 2)
df %>% mutate_at(4, round, 0)
它将所需的输出写到控制台,但不将其保存到 df。我想知道是否有更优雅、更直观的方法来做到这一点?
您可以继续使用管道运算符将代码连接在一起。
df <- df %>%
mutate_at(c(2, 3), round, 2) %>%
mutate_at(4, round, 0)
_at
、_all
、_if
变体现在被 across
取代,它还允许您在同一个 mutate
管道中输入多个操作。
library(dplyr)
df <- df %>%
mutate(across(2:3, round, 2),
across(4, round, 0))
df
# col1 col2 col3 col3.1
#1 mary 0.11 0.11 125
#2 john 0.31 0.31 764
#3 luke 0.79 0.79 223
#4 peter 0.68 0.68 765
#5 agnes 0.88 0.88 565
#6 anne 0.38 0.38 762
#7 july 0.70 0.70 684
#8 judy 0.18 0.18 656
#9 tina 0.18 0.18 897
#10 ben 1.00 1.00 566