У меня есть проблема условного извлечения данных. Я уже написал код на Python. Я учу R; и я хотел бы повторить тот же код в R.
Я пытался поставить условные аргументы, используя которые, но это, похоже, не работает. Я еще не полностью разбираюсь в синтаксисе R.
У меня есть датафрейм с 2 столбцами: x и y
Идея состоит в том, чтобы извлечь список максимальных 5 x-значений, умноженных на 2, соответствующих максимальным y-значениям, с условием, что мы выберем только те значения y, которые как минимум в 0,45 раза превышают пиковое значение y.
Итак, алгоритм будет иметь следующие шаги:
Находим пиковое значение y: max_y
Определяем порог = 0,45 * max_y
Мы применяем фильтр, чтобы получить список всех значений y, которые превышают пороговое значение: y_filt
Мы получаем список значений x, соответствующих значениям y на шаге 3: x_filt
Если число значений в x_filt меньше или равно 5, то нашим результатом будут значения в x_filt, умноженные на 2
Если x_filt имеет более 5 значений, мы выбираем только 5 значений, соответствующих 5 максимальным значениям y в списке. Затем мы умножаем на 2, чтобы получить наш результат
Код Python
max_y = max(y)
max_x = x[y.argmax()]
print (max_x, max_y)
threshold = 0.45 * max_y
y_filt = y [y > threshold]
x_filt = x [y > threshold]
if len(y_filt) > 4:
n_highest = 5
else:
n_highest = len(y_filt)
y_filt_highest = y_filt.argsort()[-n_highest:][::-1]
result = [x_filt[i]*2 for i in range(len(x_filt)) if i in y_filt_highest]
Например, набор данных
x y
1 20
2 7
3 5
4 11
5 0
6 8
7 3
8 10
9 2
10 6
11 15
12 18
13 0
14 1
15 12
Приведенный выше код даст следующие результаты
max_y = 20
max_x = 1
threshold = 9
y_filt = [20, 11, 10, 15, 18, 12]
x_filt = [1, 4, 8, 11, 12, 15]
n_highest = 5
y_filt_highest = [20, 11, 15, 18, 12]
result = [2, 8, 22, 24, 30]
Я хочу сделать то же самое в R.