2013-02-04 55 views
3

在.NET中,我可以使用string.PadLeft()string.PadRight()填充左右空格的字符串。什麼是.NET中PadLeft()和PadRight()的R等價物?

var myString = "test"; 
Console.WriteLine(myString.PadLeft(10)); //prints "  test" 
Console.WriteLine(myString.PadLeft(2)); //prints "test" 
Console.WriteLine(myString.PadLeft(10, '.')); //prints "......test"  
Console.WriteLine(myString.PadRight(10, '.')); //prints "test......" 

R中的等價物是什麼?

+1

實例/解釋到底是什麼'.PadLeft()'和'.PadRight() '會阻止我投票。隨意編輯。 – Spacedman

+0

你想/需要答案來允許用戶可設置的填充字符(如你的例子),或者是空格填充足夠? –

+0

@Ben Bolker我很高興與空間填充。我甚至不知道這一點.PadRight可以填充特定字符,但我可以想象這可能會有用。 – Contango

回答

6

您可以通過長度作爲參數:

PadLeft <- function(s, x) { 
    require(stringr) 
    sprintf("%*s", x+str_length(s), s) 
} 

PadRight <- function(s, x) { 
    require(stringr) 
    sprintf("%*s", -str_length(s)-x, s) 
} 

PadLeft("hello", 3) 
## [1] " hello" 
PadRight("hello", 3) 
## [1] "hello " 
+0

不錯,真的很好。我對C#非常熟悉,所以很高興知道我可以讓R代碼看起來更熟悉一些。 – Contango

+0

爲什麼不在這裏使用'nchar'?避免NA病例? – agstudy

6

使用sprintf,內置於R:

# Equivalent to .PadLeft. 
sprintf("%7s", "hello") 
[1] " hello" 

# Equivalent to .PadRight. 
sprintf("%-7s", "hello") 
[1] "hello " 

需要注意的是,像.NET,指定的號碼是我們希望我們的文字融入總寬度。

5

使用str_padstringr

library(stringr) 
str_pad("hello", 10) 
str_pad("hello", 10, "right") 
str_pad("hello", 10, "both") 
+0

啊,我現在看到它。我沒有看過http://cran.r-project.org/web/packages/stringr/stringr.pdf,但錯過了這個電話。 – Contango

相關問題