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

例如,我根据特定条件查看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中做到这一点就好了。


当前回答

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

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

trim(x)

其他回答

最好的方法可能是在读取数据文件时处理后面的空白。如果你使用read。csv或read。表中可以设置parameterstrip.white=TRUE。

如果你想清理字符串之后,你可以使用这些函数之一:

# Returns string without leading white space
trim.leading <- function (x)  sub("^\\s+", "", x)

# Returns string without trailing white space
trim.trailing <- function (x) sub("\\s+$", "", x)

# Returns string without leading or trailing white space
trim <- function (x) gsub("^\\s+|\\s+$", "", x)

在myDummy$country上使用下列函数之一:

 myDummy$country <- trim(myDummy$country)

要“显示”你可以使用的空白:

 paste(myDummy$country)

它将显示由引号(")包围的字符串,使空白更容易发现。

最好的方法是trimws()。

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

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

1)要查看空白,可以直接调用print.data.frame,并修改参数:

print(head(iris), quote=TRUE)
#   Sepal.Length Sepal.Width Petal.Length Petal.Width  Species
# 1        "5.1"       "3.5"        "1.4"       "0.2" "setosa"
# 2        "4.9"       "3.0"        "1.4"       "0.2" "setosa"
# 3        "4.7"       "3.2"        "1.3"       "0.2" "setosa"
# 4        "4.6"       "3.1"        "1.5"       "0.2" "setosa"
# 5        "5.0"       "3.6"        "1.4"       "0.2" "setosa"
# 6        "5.4"       "3.9"        "1.7"       "0.4" "setosa"

其他选项请参见?print.data.frame。

myDummy[myDummy$country == "Austria "] <- "Austria"

在这之后,你需要强制R不承认“奥地利”是一个关卡。让我们假设你也有“USA”和“Spain”作为关卡:

myDummy$country = factor(myDummy$country, levels=c("Austria", "USA", "Spain"))

这比得票最高的回答要少一些威慑力,但它仍然有效。

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

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

trim(x)