R colnames: имя переменной из нескольких символов изменилось на число

У меня есть фрейм данных под названием VarChange, содержащий 1005 переменных, таких как:

   row.name   SamplingEvent  Year  Zenaida_macroura  . . . 1005 variables
1  12367      S41            2005  0
2  12369      S42            2005  X
3  12370      S43            2005  4
4  OldSppName SamplingEvent  Year  Zenaida_macroura
5  NewSppName SampEvent      Year  Zenamacr

Моя цель - изменить имена столбцов фрейма данных на строку с именем "NewSppName" (максимум 8 букв, эквивалентный текущему имени переменной). Это необходимо для того, чтобы не потерять отслеживание различных переменных в ArcMap (который усекает все имена переменных до 8 символов).

Каждая вещь выглядит хорошо (т.е. R выводит соответствующие NewSppNames), когда я спрашиваю:

Var['NewSppName',]

Но когда я использую:

colnames(VarChange) <- VarChange['NewSppName', ]

или же

colnames(VarChange) <- as.character(VarChange["NewSppName",])

Я получаю следующий вывод:

   row.names  7              Year  8            . . . 1005 variables
1  12367      S41            2005  0
2  12369      S42            2005  X
3  12370      S43            2005  4
4  OldSppName SamplingEvent  Year  Zenaida_macroura
5  NewSppName SampEvent      Year  Zenamacr

95% переменных меняют имя на значение в NewSppName, но дюжина или около того меняет числа вместо имени символа, присутствующего в NewSppName.

Есть причина почему? Любое решение этого?

1 ответ

Решение

При использовании индексации вам нужно использовать одно из логических или числовых или имен строк. Тот факт, что у вас есть столбец с именем 'row.name', не скажет R использовать его для индексации.

VarChange <- read.table(text="   row.name   SamplingEvent  Year  Zenaida_macroura  
1  12367      S41            2005  0
2  12369      S42            2005  X
3  12370      S43            2005  4
4  OldSppName SamplingEvent  Year  Zenaida_macroura
5  NewSppName SampEvent      Year  Zenamacr
", header=TRUE)
> as.character(VarChange["NewSppName",])
[1] "NA" "NA" "NA" "NA"

Поэтому вместо этого используйте "5" или создайте правильный логический вектор VarChange$row.names=="NewSppName", Вероятно, вы получали разные результаты, потому что у вас в рабочей области было несколько разных объектов, для которых было указано имя "NewSppName". Вам также необходимо безопасно преобразовать в символ с помощью sapply () - ing as.character, поскольку они являются факторами с различными уровнями, и глобальный as.character(.) не будет успешным:

> sapply(VarChange[VarChange$row.name=="NewSppName",] ,as.character)
        row.name    SamplingEvent             Year Zenaida_macroura 
    "NewSppName"      "SampEvent"           "Year"       "Zenamacr" 

> colnames(VarChange) <- sapply(VarChange[5,] ,as.character)
> VarChange
  NewSppName     SampEvent Year         Zenamacr
1      12367           S41 2005                0
2      12369           S42 2005                X
3      12370           S43 2005                4
4 OldSppName SamplingEvent Year Zenaida_macroura
5 NewSppName     SampEvent Year         Zenamacr
Другие вопросы по тегам