我有一些麻烦的前导和尾随空白在一个数据。框架。

例如,我根据特定条件查看data.frame中的特定行:

> myDummy[myDummy$country == c("Austria"),c(1,2,3:7,19)] 



[1] codeHelper     country        dummyLI    dummyLMI       dummyUMI       

[6] dummyHInonOECD dummyHIOECD    dummyOECD      

<0 rows> (or 0-length row.names)

我想知道为什么我没有得到预期的输出,因为奥地利显然存在于我的数据框架中。在查看了我的代码历史并试图找出错误后,我尝试了:

> myDummy[myDummy$country == c("Austria "),c(1,2,3:7,19)]
   codeHelper  country dummyLI dummyLMI dummyUMI dummyHInonOECD dummyHIOECD
18        AUT Austria        0        0        0              0           1
   dummyOECD
18         1

我所更改的命令只是在奥地利之后增加了一个空白。

显然还会出现更多烦人的问题。例如,当我喜欢根据国家列合并两帧时。一个data.frame使用“Austria”,而另一个frame使用“Austria”。匹配不起作用。

有没有一种很好的方法来“显示”屏幕上的空白,让我意识到这个问题? 我能移除R开头和结尾的空白吗?

到目前为止,我曾经写过一个简单的Perl脚本,它消除了白色的速度,但如果我能以某种方式在R中做到这一点就好了。


当前回答

使用grep或grepl查找带有空格的观测值,并使用sub删除它们。

names<-c("Ganga Din\t", "Shyam Lal", "Bulbul ")
grep("[[:space:]]+$", names)
[1] 1 3
grepl("[[:space:]]+$", names)
[1]  TRUE FALSE  TRUE
sub("[[:space:]]+$", "", names)
[1] "Ganga Din" "Shyam Lal" "Bulbul"

其他回答

最好的方法是trimws()。

下面的代码将这个函数应用到整个数据框架。

mydataframe<- data.frame(lapply(mydataframe, trimws),stringsAsFactors = FALSE)

我试过trim()。它适用于空格和“\n”。

x = '\n              Harden, J.\n              '

trim(x)

另一个选择是使用stringi包中的stri_trim函数,该函数默认删除前导和后面的空白:

> x <- c("  leading space","trailing space   ")
> stri_trim(x)
[1] "leading space"  "trailing space"

如果只移除前导空白,请使用stri_trim_left。如果只移除尾随空格,请使用stri_trim_right。当您想要删除其他前导字符或尾随字符时,必须使用pattern =指定。

更多信息请参见?stri_trim。

也可以通过gdata包中的trim()函数来移除前导和后面的空格:

require(gdata)
example(trim)

使用的例子:

> trim("   Remove leading and trailing blanks    ")
[1] "Remove leading and trailing blanks"

我更喜欢把答案作为评论添加到user56的,但我还不能作为一个独立的答案写作。

一个简单的函数来删除开头和结尾的空白:

trim <- function( x ) {
  gsub("(^[[:space:]]+|[[:space:]]+$)", "", x)
}

用法:

> text = "   foo bar  baz 3 "
> trim(text)
[1] "foo bar  baz 3"