Как изменить имена столбцов там, где это предотвращает scale ()

Я думаю, что это может быть относительно простой ответ, но я понятия не имею, откуда взялась проблема и как ее искать. Не то чтобы я не пробовал!

В любом случае, я думаю, было бы неплохо получить четкий ответ на этот вопрос на SO, поскольку я не могу быть единственным человеком, который когда-либо сталкивался с этим.

У меня есть список фреймов данных, созданных из tidy, который был транспонирован, чтобы дать столбец для каждой переменной и строку для каждого из параметров, таких как коэффициент, доверительные интервалы и т. Д., Выглядит следующим образом:

> print(dd)
[[1]]
  Seasonmasika Seasonvuli Parameter
1        -1.35      -0.83  estimate
2         0.25       0.23 std.error
3        -5.51      -3.61 statistic
4         0.00       0.00   p.value
5         0.48       0.45        CI

[[2]]
  scale(Group2) scale(Group3) scale(dist.water) Parameter
1          0.11         -0.46             -0.49  estimate
2          0.08          0.15              0.09 std.error
3          1.40         -3.13             -5.30 statistic
4          0.16          0.00              0.00   p.value
5          0.15          0.29              0.18        CI


> lapply(dd, names)
[[1]]
[1] "Seasonmasika" "Seasonvuli"   "Parameter"   

[[2]]
[1] "scale(Group2)"     "scale(Group3)"     "scale(dist.water)" "Parameter" 

Проблема в том, что имена переменных не интуитивно понятны, и там, где я масштабировал переменные в модели, имя переменной все еще имеет текст «scale ()». Хуже всего то, что эту часть строки имени столбца нельзя заменить, только текст внутри скобок. Например, эта команда ничего не делает с именами столбцов, в которых есть scale (), но работает с другими.

> test<-lapply(dd, function(x){
+   colnames(x)<- gsub(pattern = "Seasonvuli", replacement = "SR", colnames(x))  
+   colnames(x)<- gsub(pattern = "Seasonmasika", replacement = "LR", colnames(x))
+   colnames(x)<- gsub(pattern = "scale(Group2)", replacement = "Acacia-Merua", colnames(x))
+   colnames(x)<- gsub(pattern = "scale(Group3)", replacement = "Combretum-Amarula", colnames(x))
+   return(x)
+ })
> 
> lapply(test, names)
[[1]]
[1] "LR"        "SR"        "Parameter"

[[2]]
[1] "scale(Group2)"     "scale(Group3)"     "scale(dist.water)" "Parameter"        

Но он заменит то, что находится внутри скобок scale ():

> test<-lapply(dd, function(x){
+   colnames(x)<- gsub(pattern = "Seasonvuli", replacement = "SR", colnames(x))  
+   colnames(x)<- gsub(pattern = "Seasonmasika", replacement = "LR", colnames(x))
+   colnames(x)<- gsub(pattern = "Group2", replacement = "Acacia-Merua", colnames(x))
+   colnames(x)<- gsub(pattern = "scale(Group3)", replacement = "Combretum-Amarula", colnames(x))
+   return(x)
+ })
> 
> lapply(test, names)
[[1]]
[1] "LR"        "SR"        "Parameter"

[[2]]
[1] "scale(Acacia-Merua)" "scale(Group3)"       "scale(dist.water)"   "Parameter"    

Кто-нибудь знает, почему это происходит, и возможное решение для переименования этих столбцов в соответствии с моей первой попыткой кода вверху в «общепринятом смысле», как это обычно делается?


person Nebulloyd    schedule 28.11.2019    source источник
comment
Попробуйте pattern = "scale\\(Group3\\)"; ) имеет особое значение в Reg Ex, поэтому нам нужно пропустить использование \\   -  person A. Suliman    schedule 28.11.2019
comment
Я ответил на вопрос, подтверждающий ваш комментарий, я подозревал, что это было что-то вроде этого молчаливого   -  person Nebulloyd    schedule 28.11.2019


Ответы (1)


Это не мой ответ, а из комментария @ A.Suliman. Это была проблема не с scale () как таковым, а с тем, как я кодировал шаблон из-за особого значения скобок в Reg ex, как указано в комментарии выше. Итак, решение состоит в том, чтобы закодировать как таковой

> test<-lapply(dd, function(x){
+   colnames(x)<- gsub(pattern = "Seasonvuli", replacement = "SR", colnames(x))  
+   colnames(x)<- gsub(pattern = "Seasonmasika", replacement = "LR", colnames(x))
+   colnames(x)<- gsub(pattern = "scale\\(Group2\\)", replacement = "Acacia-Merua", colnames(x))
+   colnames(x)<- gsub(pattern = "scale\\(Group3\\)", replacement = "Combretum-Amarula", colnames(x))
+   return(x)
+ })
person Nebulloyd    schedule 28.11.2019