#javascript #google-apps-script #google-sheets #random
#язык JavaScript #google-приложения-скрипт #google-листы #Случайный
Вопрос:
Привет всем, я работаю над набором данных в Google Sheet, и мне нужно получить случайные данные (указанное число) по именам col 3 для аудита.Я использую скрипт приложения Google для того же, но не смог получить данные. Вот код, который я пробовал, но мне не нужен процент данных, мне нужны равномерно распределенные случайные данные для каждого сотрудника в col 3.
function myFunction() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var trn = ss.getSheetByName('Data'); var originalData = trn.getRange(2, 1, trn.getLastRow() - 1, 3).getValues(); var ReviewerEmail = data; var data = originalData.filter(function(item) { return item[1] === 'rob' || item[1] === 'john' || item[1] === 'toger'; }); //Logger.log(data); var targetsheet = ss.insertSheet(Reviewer); targetsheet.getRange(1, 1, data.length, data[0].length).setValues(data); } function getsampledata() { var sheet = SpreadsheetApp.getActiveSheet(); var range = sheet.getRange('A:C'); var values = range.getValues(); var headers = values.shift(); var nameColumn = 1; var uniqueNames = values .map((row) =gt; row[nameColumn]) .filter((item, i, ar) =gt; ar.indexOf(item) === i) .filter(String); var data = [headers]; uniqueNames.forEach(function(name) { var nameEntries = values.filter((row) =gt; row[nameColumn] == name); var entries = nameEntries.length; var tenth = Math.round((entries / 100) * 27.35); //Sampling Percentage for (i = 0; i lt; tenth; i ) { var random = Math.floor(Math.random() * nameEntries.length); data.push(nameEntries[random]); nameEntries.splice(random, 1); } }); return data; }
Комментарии:
1. Извините, что я не до конца понял вашу цель, особенно эту
I don't want the % of data I want to get it. I want the equal distributed random data for each employee.
. Можете ли вы привести несколько примеров ожидаемого результата. А также поделитесь образцом листа2. @Ron M Мне нужны равномерно распределенные случайные данные для каждого сотрудника в col 3. Например, если Джон сделал 4 образца, мне нужно 2 или 3 (число, которое я укажу), это даст 2 случайные строки работы джона
Ответ №1:
Если вам нужно определенное количество образцов, используйте параметр, чтобы указать, сколько вы хотите для каждого.
Весь рабочий сценарий:
function getsampledata(sample) { var sheet = SpreadsheetApp.getActiveSheet(); var range = sheet.getRange('A:C'); var values = range.getValues(); var headers = values.shift(); var nameColumn = 2; var uniqueNames = values .map((row) =gt; row[nameColumn]) .filter((item, i, ar) =gt; ar.indexOf(item) === i) .filter(String); var data = [headers]; uniqueNames.forEach(function(name) { var nameEntries = values.filter((row) =gt; row[nameColumn] == name); for (i = 0; i lt; sample; i ) { var random = Math.floor(Math.random() * nameEntries.length); data.push(nameEntries[random]); nameEntries.splice(random, 1); } }); return data; }
Комментарии:
1. Спасибо за вашу помощь, но что, если мне не нужен процент выборки данных. Вместо этого мне нужны 2 или 3 строки данных о каждом сотруднике.
2. Вы имеете в виду определенный процент? или конкретный счет? если у нас есть 100 предметов, 50 от Роба, 30 от Джона и 20 от тогера, сколько предметов вы хотите, чтобы у каждого человека было? @5aadat
3. Вы должны быть конкретны в правилах распространения, чтобы другие могли понять @5aadat
4. Не какой-то конкретный, например, мне нужно 4 строки данных из каждой, и они могут меняться каждый день не в процентах, а в цифрах, как Джон проделал 350 строк работы, и мне нужно 4 случайных выборки @ASyntuBU
5. Больше разъяснений — как будто все выполнили 300 400 500 строк работы, и мне нужно определенное количество образцов каждой из них. Как будто я хочу 4 случайных образца каждого из них @ASyntuBU