Табличная функция в R с фреймом данных, имеющим значение stringAsFactor True - PullRequest
0 голосов
/ 14 мая 2018

Я читаю CSV-файл в R с кодом ниже:

df = read.csv("filename.csv", header = T, stringsAsFactor =T)[-2,]

(мне нужно пропустить второй ряд, так как все значения имеют ноль во втором ряду) Он хорошо читает, пропустив второй ряд исходного файла CSV.

Теперь мне нужно подсчитать уникальное значение столбца, поэтому я использую следующий код:

table(df$Column_name)

Я получаю первую запись как 0 с подсчетом 0. Таким образом, всего 249 уникальных значений, но я получаю 250 с этим дополнительным 0 с подсчетом 0.

Я попытался прочитать тот же CSV-файл, но на этот раз с stringsAsFactor = False. и я получаю правильный результат табличной функции.

Может ли кто-нибудь объяснить мне, почему он показывает мне лишние 0 со счетом 0.

Ниже приведен пример вывода консоли R

> content = read.csv('sample.csv')
> content
    Plot  Column
1  first column1
2      0       0
3 second column2
4  third column3
5 fourth column4
> 
> df = read.csv('sample.csv', header = T, stringsAsFactors = T)[-2,]
> df
    Plot  Column
1  first column1
3 second column2
4  third column3
5 fourth column4
> table(df$Column)

      0 column1 column2 column3 column4 
      0       1       1       1       1 
> 
> df1 = read.csv('sample.csv', header = T, stringsAsFactors = F)[-2,]
> df1
    Plot  Column
1  first column1
3 second column2
4  third column3
5 fourth column4
> table(df1$Column)

column1 column2 column3 column4 
      1       1       1       1 
> unique(df1$Column)
[1] "column1" "column2" "column3" "column4"
> 

1 Ответ

0 голосов
/ 15 мая 2018

Как комментарии r2evans ,

Когда вы импортируете его, используя stringsAsFactors = TRUE, и во второй строке есть 0, то этот 0 сохраняется как уровень в пределахфакторы.Когда вы удаляете эту строку, коэффициенты сохранят этот «0 возможный», если / пока вы не установите уровни снова, используя коэффициент (..., уровни = ...) или уровни <-.Альтернативный вариант - импортировать с помощью stringsAsFactors = FALSE, удалить поврежденную строку, а затем вручную вызвать коэффициент. </p>

Давайте попробуем пример с данными радужной оболочки.

data(iris)

## Se all the species.
table(iris$Species)

#>    setosa versicolor  virginica 
#>        50         50         50 

## Remove all setosa's (analogous to removing your '0').
iris <- iris[iris$Species != "setosa", ]

## Setosa still in the list.
table(iris$Species)

#>     setosa versicolor  virginica 
#>          0         50         50 

## So just re-factor it to set new factor levels.
iris$Species <- factor(iris$Species)

## Lets try again.
table(iris$Species)

#> versicolor  virginica 
#>         50         50 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...