我在 data.frame 中的前导和尾随空格时遇到了一些麻烦。
例如,我根据某个条件查看一个特定的row:data.frame
row
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)
我想知道为什么我没有得到预期的输出,因为奥地利显然存在于我的data.frame. 在查看了我的代码历史并试图找出问题所在后,我尝试了:
> 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 ",而另一个框架有"Austria"。匹配不起作用。
"Austria "
"Austria"
到目前为止,我曾经编写过一个简单的Perl脚本来消除白人的节奏,但如果我能以某种方式在 R 中做到这一点,那就太好了。
可能最好的方法是在读取数据文件时处理尾随空格。如果你使用read.csv或者read.table你可以设置参数strip.white=TRUE。
read.csv
read.table
strip.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
myDummy$country <- trim(myDummy$country)
要“显示”您可以使用的空白:
paste(myDummy$country)
这将显示用引号 (“) 包围的字符串,使空格更容易被发现。