Вот забавный базовый метод R с Reduce
.
Reduce(cbind,
list(Reduce("+", list(df1[intersect(names(df1), names(df2))],
df2[intersect(names(df1), names(df2))])), # sum results
df1[setdiff(names(df1), names(df2))], # in df1, not df2
df2[setdiff(names(df2), names(df1))])) # in df2, not df1
Возвращает
A C D B
1 2 2 1 1
2 4 4 2 2
Предполагается, что оба столбца df1 и df2 имеют столбцы, которых нет в другом. Если это не так, вам придется скорректировать список.
Обратите внимание, что вы можете заменить Reduce
на do.call
в обоих местах, и вы получите тот же результат.
испытайте это:
var rgbString = "rgb(0, 70, 255)"; // get this in whatever way.
var parts = rgbString.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
// parts now should be ["rgb(0, 70, 255", "0", "70", "255"]
delete (parts[0]);
for (var i = 1; i <= 3; ++i) {
parts[i] = parseInt(parts[i]).toString(16);
if (parts[i].length == 1) parts[i] = '0' + parts[i];
}
var hexString ='#'+parts.join('').toUpperCase(); // "#0070FF"
В ответ на вопрос в комментариях ниже:
я пытаюсь изменить regex для обработки и rgb и rgba, зависящего, какой я получаю. Какие-либо подсказки? Спасибо.
я не абсолютно уверен, если это имеет смысл в контексте этого вопроса (так как Вы не можете представить rgba, раскрашивают шестнадцатеричное число), но я предполагаю, что могло быть другое использование. Так или иначе Вы могли изменить regex, чтобы быть похожими на это:
/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(0\.\d+))?\)$/
Пример произвел:
var d = document.createElement('div');
d.style.backgroundColor = 'rgba( 255, 60, 50, 0)';
/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(1|0\.\d+))?\)$/.exec(d.style.backgroundColor);
// ["rgba(255, 60, 50, 0.33)", "255", "60", "50", "0.33"]
Можно выбрать цвет CSS, использующий rgb также, такой как это:
background-color: rgb(0, 70, 255);
Это действительный CSS , не волноваться.
<час>Редактирование: Видят ответ nickf для хорошего способа преобразовать его, если Вы абсолютно должны.
Некоторое время назад я нашел другую функцию ( от R0bb13 ). У него нет регулярного выражения, поэтому мне пришлось позаимствовать его у nickf, чтобы он работал правильно. Я публикую его только потому, что это интересный метод, который не использует оператор if или цикл, чтобы дать вам результат. Также этот скрипт возвращает шестнадцатеричное значение с # (это было необходимо для плагина Farbtastic , который я использовал в то время)
//Function to convert hex format to a rgb color
function rgb2hex(rgb) {
var hexDigits = ["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"];
rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
function hex(x) {
return isNaN(x) ? "00" : hexDigits[(x - x % 16) / 16] + hexDigits[x % 16];
}
return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);
}
// call the function: rgb( "rgb(0, 70, 255)" );
// returns: #0046ff
Примечание: шестнадцатеричный результат сценария nickf должен быть 0046ff, а не 0070ff, но ничего страшного: P
Update, еще один лучший альтернативный метод:
function rgb2hex(rgb) {
rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
function hex(x) {
return ("0" + parseInt(x).toString(16)).slice(-2);
}
return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);
}
Я провожу некоторое время, работая над этим, а также над приложением, для которого я был заключен контракт. В основном, поскольку API в настоящее время существует, это невозможно. Основной проблемой является класс UIImage STRIPS все данные EXIF, за исключением ориентации out. Кроме того, функция сохранения в ролле камеры удаляет эти данные. Таким образом, единственный способ захватить и сохранить любые дополнительные данные EXIF - сохранить их в частном «ролле камеры» в вашем приложении. Я также подал эту ошибку на яблоко и подчеркнул необходимость для представителей рецензента приложения, с которыми мы контактировали. Надеюсь, когда-нибудь они добавят его в.. В противном случае это делает использование тегов GEO совершенно бесполезным, поскольку оно работает только в приложении камеры «stock».
ПРИМЕЧАНИЕ Некоторые приложения в магазине приложений взламывают . Благодаря тому, что я обнаружил, прямой доступ к роллу камеры и сохранение фотографий прямо к нему, чтобы сохранить данные GEO. Тем не менее, это работает только с камерой ролл/сохраненных фотографий, а НЕ остальной части фотобиблиотеки. Фотографии, «синхронизированные» с телефоном с компьютера, содержат все данные EXIF, за исключением ориентации.
Я до сих пор не могу понять, почему эти заявки были одобрены (черт возьми, они даже DELETE из рулона камеры), и наше приложение, которое не делает ничего из этого, все еще сдерживается.
-121--990387-Вы пробовали следующее?
SELECT users.*,
(SELECT count(*) FROM bookshelf WHERE bookshelf.user_id = users.ID) as titles,
((SELECT count(*) FROM book_reviews WHERE book_reviews.user_id = users.ID) +
(SELECT count(*) FROM recipe_reviews WHERE recipe_reviews.user_id = users.ID)) as reviewtotal
FROM users
-121--3632207- Я нашел это решение http://haacked.com/archive/2009/12/29/convert-rgb-to-hex.aspx и использую его в своем проекте
Эти решения не работают в Chrome, поскольку он возвращает rgba (x, x, x, x) для фона - цвет.
РЕДАКТИРОВАТЬ: Это не обязательно так. Chrome по-прежнему будет устанавливать фон с помощью rgb (), в зависимости от того, что вы делаете. Скорее всего, пока не применяется альфа-канал, Chrome будет отвечать rgb вместо rgba.
Как насчет этого решения, функция stringRGB2HEX возвращает копию входной строки, где все вхождения цветов в формате «rgb (r, g, b)» были заменен шестнадцатеричным форматом "#rrggbb".
//function for private usage of the function below
//(declaring this one in global scope should make it faster rather than
//declaraing it as temporary function inside stringRGB2HEX that need to be
//instantieted at every call of stringRGB2HEX
function _rgb2hex(rgb_string, r, g, b)
{
//VERY IMPORTANT: by adding (1 << 24) we avoid 'rgb(0, 0, 0)' to be mistakenly converted into '#0'
var rgb = (1 << 24) | (parseInt(r) << 16) | (parseInt(g) << 8) | parseInt(b); //same thing of: ( r + (256 * g) + (65536 * b) + 16777216)
//toString(16) specify hex 16 radix, works only for numbers [source: http://msdn.microsoft.com/en-us/library/dwab3ed2(v=VS.85).aspx]
return '#' + rgb.toString(16).substr(1); //substr(1) because we have to remove the (1 << 24) added above
}
function stringRGB2HEX(string)
{
if(typeof string === 'string')
string = string.replace(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/g, _rgb2hex);
return string;
}
Он также преобразует цвета RGB в сложные стили, такие как background
.
Значение style.background
, например: «Нет прокрутки без повтора, rgb (0, 0, 0)»
легко преобразовать в «Прокрутка без повтора» # 000000 "
, просто выполнив stringRGB2HEX (style.background)