Я хочу обновить значения столбца в таблице до Заголовка

Я использую ggplot2, и ваш пример, похоже, отлично работает с текущей версией.

Однако, легко найти варианты, которые все еще создают проблемы. Я сам был смущен подобным поведением, и именно так я нашел этот пост (верхний результат Google для «ggplot, как оценивать переменные при передаче»). Например, если мы переместим ggplot из plotfunc:

xy <- data.frame(x=1:10,y=1:10)

plotfunc <- function(Data,YMul=2){
  geom_line(aes(x=x,y=y*YMul))
}

ggplot(xy)+plotfunc(xy)
# Error in eval(expr, envir, enclos) : object 'YMul' not found

В приведенном выше варианте «захват локальной среды» не является решением, потому что ggplot не вызывается из функции, и только ggplot имеет аргумент «environment =».

Но теперь существует семейство функций «aes_», «aes_string», «aes_q», которые похожи на «aes», но фиксируют локальные переменные. Если мы используем «aes_» в приведенном выше, мы все равно получаем ошибку, потому что теперь он не знает о «x». Но легко обращаться к данным напрямую, что решает проблему:

plotfunc <- function(Data,YMul=2){
  geom_line(aes_(x=Data$x,y=Data$y*YMul))
}
ggplot(xy)+plotfunc(xy)
# works
-1
задан Daniel E. 17 January 2019 в 16:10
поделиться

2 ответа

Data Hygiene - это постоянная битва. Правильный случай никогда не бывает таким простым, как можно подумать. Существуют многочисленные различия и несоответствия при использовании данных из дикой природы.

Вот функция, которая может быть расширена при необходимости.

Полное раскрытие: Есть много других более производительных функций, но они, как правило, имеют упрощенный подход.

Пример

Declare @YourTable table (SomeCol varchar(100))
Insert Into @YourTable values
('old mcdonald'),
('dr. Langdon ,dds'),
('b&o railroad'),
('john-m-smith'),
('CARSON/jACOBS'),
('jAmes o''neil')

 Select *
       ,ProperCase = [dbo].[svf-Str-Proper](SomeCol)
 From @YourTable

Возвращает

SomeCol             ProperCase
old mcdonald        Old McDonald
dr. Langdon ,dds    Dr. Langdon ,DDS
b&o railroad        B&O Railroad
john-m-smith        John-M-Smith
CARSON/jACOBS       Carson/Jacobs
jAmes o'neil        James O'Neil

UDF, если интересно

[112 ]
0
ответ дан John Cappelletti 17 January 2019 в 16:10
поделиться

Для базовых примеров, используя разделитель строк таблицы подсчета, такой как Джеффа Модена, или любую другую функцию разделения, которую вы хотите вместо DelimitedSplit8K() ниже, вы можете разделить их на пробелы, а затем собрать их обратно вместе после исправления правильного случая. Обратите внимание, что использование этого типа функции разделения быстрее, чем обычно встречающиеся методы RBAR (с циклом и т. Д.).

DEMO

declare @table table (v varchar(4000))
insert into @table
values
('abc abc abc'),
('Def abc ABC'),
('qrs ABC abc'),
('tuv'),
(' this is an odd-string# that3 has some 435 in it. It has leading and trailing spaces? ')

select distinct
    *
    ,STUFF((
          SELECT ' ' + upper(left(lower(rtrim(ltrim(x.Item))),1)) + right(lower(rtrim(ltrim(x.Item))),len(rtrim(ltrim(x.Item))) - 1)
          from @table t
          cross apply DelimitedSplit8K(rtrim(ltrim(v)),' ') x
          where t.v = b.v
          FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') 
from @table b
0
ответ дан scsimon 17 January 2019 в 16:10
поделиться
Другие вопросы по тегам:

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