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