Как обрезать ведущий и запаздывающий пробел?

Я испытываю некоторые затруднения вести и запоздать пробел в data.frame. Например, мне нравится смотреть на определенное row в a 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". Соответствие не работает.

  1. Существует ли хороший способ 'показать' пробел на моем экране так, чтобы я знал о проблеме?
  2. И я могу удалить продвижение и запаздывающий пробел в R?

До сих пор я раньше писал простое Perl сценарий, который удаляет пробел, но было бы хорошо, если я могу так или иначе сделать это в R.

345
задан zx8754 24 June 2019 в 11:01
поделиться

3 ответа

Вероятно, лучший способ - обрабатывать завершающие пробелы при чтении файла данных. Если вы используете read.csv или read.table , вы можете установить параметр strip.white = TRUE .

Если вы хотите впоследствии очистить строки, вы можете использовать одну из этих функций:

# returns string w/o leading whitespace
trim.leading <- function (x)  sub("^\\s+", "", x)

# returns string w/o trailing whitespace
trim.trailing <- function (x) sub("\\s+$", "", x)

# returns string w/o leading or trailing whitespace
trim <- function (x) gsub("^\\s+|\\s+$", "", x)

Чтобы использовать одну из этих функций в myDummy $ country :

 myDummy$country <- trim(myDummy$country)

Чтобы «показать» пробелы, которые вы можете использовать :

 paste(myDummy$country)

, который покажет вам строки, заключенные в кавычки ("), что упрощает поиск пробелов.

446
ответ дан 23 November 2019 в 00:30
поделиться

ad1) Чтобы увидеть пробелы, вы можете напрямую вызвать 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 для других опций.

11
ответ дан 23 November 2019 в 00:30
поделиться

Используйте 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"  
9
ответ дан 23 November 2019 в 00:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: