将逗号类分配给数据框

时间:2017-07-31 12:07:35

标签: r

我有一个data.frame,其中有几个数字列 喜欢分配“逗号”类。 这是需要的,因为我有一个中央数据框,我使用Openxlsx包过滤并保存到Excel。 并且需要逗号类,以便数据在excel中以逗号格式显示

这是数据框:

set.seed(10)
df_central_database <- data.frame(Category = as.character(sample(words[1:10], size = 50, replace = TRUE)) ,
           Summ_Income =sample(1000:10000, size = 50, replace = TRUE),
           Summ_Securities =sample(1000:10000, size = 50, replace = TRUE),
           Summ_Bonds =sample(1000:10000, size = 50, replace = TRUE),
           Summ_Options =sample(1000:10000, size = 50, replace = TRUE)
           )

str(df_central_database)

'data.frame':   50 obs. of  5 variables:
 $ Category       : Factor w/ 10 levels "a","able","about",..: 6 4 5 7 1 3 3 3 7 5 ...
 $ Summ_Income    : int  4189 9428 3213 5258 2724 6249 5135 5207 4598 5548 ...
 $ Summ_Securities: int  4099 1551 4321 4668 9229 8999 9854 5295 7242 4832 ...
 $ Summ_Bonds     : int  8916 2774 1625 2416 4001 2620 2318 3615 9425 1922 ...
 $ Summ_Options   : int  3008 5823 6963 8633 2342 7031 7855 9988 3369 8967 ...

现在更改列类是使用每行一行完成的,如下所示:

class(df_central_database$Summ_Income) <- "comma"
class(df_central_database$Summ_Securities) <- "comma"
class(df_central_database$Summ_Bonds) <- "comma"
class(df_central_database$Summ_Options) <- "comma"


str(df_central_database)

'data.frame':   50 obs. of  5 variables:
 $ Category       : Factor w/ 10 levels "a","able","about",..: 6 4 5 7 1 3 3 3 7 5 ...
 $ Summ_Income    :Class 'comma'  int [1:50] 4189 9428 3213 5258 2724 6249 5135 5207 4598 5548 ...
 $ Summ_Securities:Class 'comma'  int [1:50] 4099 1551 4321 4668 9229 8999 9854 5295 7242 4832 ...
 $ Summ_Bonds     :Class 'comma'  int [1:50] 8916 2774 1625 2416 4001 2620 2318 3615 9425 1922 ...
 $ Summ_Options   :Class 'comma'  int [1:50] 3008 5823 6963 8633 2342 7031 7855 9988 3369 8967 ...

是否可以使用dplyr mutate_at进行类分配 喜欢这样的东西?

df_central_database %>%
  mutate_at(.vars = vars(contains("Summ")), 
            .funs = class(df_central_database$Income) <- "comma") %>%
  str()

或任何其他快捷方式,可以帮助我将一些列类更改为逗号,只需单击一下。

由于 圣拉斐尔

2 个答案:

答案 0 :(得分:5)

获取要更改为向量的内容的名称:

> changers = names(df_central_database)[grepl("Summ",names(df_central_database))]
> changers
[1] "Summ_Income"     "Summ_Securities" "Summ_Bonds"      "Summ_Options"   

然后将它们打成一个循环:

> for(n in changers){class(df_central_database[[n]])= "comma"}

无需额外的包即可。

答案 1 :(得分:2)

如果你真的想使用pry,那么你可以创建一个自定义函数来进行转换并通过irb应用它,即

$ pry
[1] pry(main)> ls Fixnum
Object.methods: yaml_tag
Fixnum#methods: 
  %   +   <    ==   >>   bit_length  fdiv       odd?  to_f   ~
  &   -   <<   ===  []   div         inspect    ord   to_s 
  *   -@  <=   >    ^    divmod      magnitude  size  zero?
  **  /   <=>  >=   abs  even?       modulo     succ  |    
[2] pry(main)>
...

给出了结构,

dplyr