【问题标题】:is there a z.fill function in RR中是否有z.fill函数
【发布时间】:2016-05-18 19:05:51
【问题描述】:

我有一个数据框

df=data.frame(f=c('a','ab','abc'),v=1:3)

并使用以下内容创建一个新列:

df$c=paste(df$v,df$f,sep='')

结果是

> df
    f v    c
1   a 1   1a
2  ab 2  2ab
3 abc 3 3abc

我希望 c 列采用这种格式:

> df
    f v    c
1   a 1 1  a
2  ab 2 2 ab
3 abc 3 3abc

这样连接值的总长度是一个固定数字(在本例中为 4 个字符),并且填充它将选择一个字符,例如 | (在本例中为 \w)。

R中有这样的函数吗?我认为它类似于 python 中的 z.fill 函数,但我不是 python 程序员,更愿意留在 R 中而不是在语言之间切换进行处理。最终,我正在创建一个 10 列的超变量,并认为这将有助于下游处理

我猜它会在粘贴函数中,但不确定如何“填充因子”使其具有固定宽度

【问题讨论】:

  • 试试sprintf("%d%3s",df$v,df$f)

标签: python r width fill


【解决方案1】:

您可以使用format() 函数漂亮地打印列的值。例如:

> format(df$f, width = 3, justify = "right")
[1] "  a" " ab" "abc"

所以你的代码应该是:

df <- within(df, {
  c <- paste0(v, format(f, width = 3, justify = "right"))
})
df

结果:

> df
    f v    c
1   a 1 1  a
2  ab 2 2 ab
3 abc 3 3abc

【讨论】:

    【解决方案2】:

    您可以使用formatC函数如下

    df$c <- paste(df$v, formatC(as.character(df$f), width = 3, flag = " "), sep = "")
    
    df
        f v    c
    1   a 1 1  a
    2  ab 2 2 ab
    3 abc 3 3abc
    

    数据

    df <- data.frame(f = c('a','ab','abc'), v=1:3)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-08
      • 1970-01-01
      • 2019-10-05
      • 1970-01-01
      • 1970-01-01
      • 2012-04-29
      • 2020-01-16
      • 2023-03-28
      相关资源
      最近更新 更多