R: есть ли эквивалент применения ссылки на заблокированную ячейку Excel ко всем вычислениям поля?

#r #excel

#r #excel

Вопрос:

Я пытаюсь перенести симуляцию / калькулятор из Excel в R. Однако у меня возникли проблемы с поиском эквивалентов R в Excel.

В конечном итоге я планирую использовать моделирование / калькулятор либо на Rmarkdown, либо на shiny.

Для этой проблемы я пытаюсь повторить вычисления по ссылке на заблокированную ячейку.

У меня есть две отдельные таблицы.

Таблица 1

 x   y   z
0.5 0.3 120
  

Таблица 2

 a  b
32 33
7  22
65 11
43 21
3  45
  

Таблица 1 предназначена для часто изменяемых пользователем входных данных. Если бы это было блестящим, я полагаю, это была бы скользящая шкала.

Для таблицы 2 я хочу добавить вычисляемое поле, умножающее каждую «ячейку» на x таблицы 1, что равно 0,5.

Если бы это был Excel, я бы добавил два знака $ в ячейку, чтобы заблокировать ссылку на ячейку. Уравнение было бы Table 2(C2) = Table 2(A2) * Table 1($X$2), Table 2(C3) = Table 2(A3) * Table 1($X$2) .

Конечная цель состоит в том, чтобы результаты в таблице 2 отображались в виде графика shiny.

В R у меня есть следующее:

 Table2$c <- Table2$a * Table1$x
  

Однако я получаю сообщение об ошибке. Я не уверен, связано ли это с тем, что размер таблицы должен быть одинаковым. Если это так, существует ли синтаксис для блокировки вычисления? Например, если я просто помещу

 Table2$c <- Table2$a * 0.5
  

Я не думаю, что возникнет проблема. Но я хочу, чтобы значение 0.5 могло изменяться динамически. Нужно ли мне сделать промежуточный шаг, чтобы преобразовать таблицу 1 в тот же размер, что и таблица 2, и повторить x ?

Спасибо

Комментарии:

1. У меня нет никакой ошибки. Не могли бы вы поделиться строкой ошибки?

2. Вы предоставляете так много информации. Но тогда все, что вы говорите, это «Я получаю ошибку». Скажите нам, в чем ошибка! Покажите код, который вы запустили, и результат, который вы получаете.

3. Прошу прощения, моя ошибка: Error in `$<-.data.frame`(`*tmp*`, c, value = numeric(0)) : replacement has 0 rows, data has 5 .

4. На самом деле, я беру второй взгляд и использую Table1 $ y вместо x успешно. Кроме того, другая таблица, которая у меня была, с тем же размером строки, что и таблица 2, иногда давала сбой. Я думаю, что сейчас что-то не так с этими CSV-файлами.

5. Спасибо за подтверждение Edo. В файле CSV, который я использовал, были ошибки форматирования. Я вручную создал фрейм данных в коде. У меня было меньше ошибок, но одна все еще происходила (аналогично моему комментарию ниже Dason). Это было потому, что я неправильно назвал переменные. После этого все работает. Похоже, концепция ссылок на заблокированные ячейки ($ A $ 1) встроена в R. Спасибо!

Ответ №1:

если вы хотите умножить два вектора в R (столбец в фрейме данных является вектором), они должны быть одинакового размера. Однако, как вы сказали, также возможно умножить вектор на одно число. Если в таблице 1 всегда есть только одна строка, это должно сработать:

 Table1 <- data.frame(x = 0.5,
                     y = 0.3,
                     z = 120)

Table2 <- data.frame(a = c(32, 7, 65, 43, 3),
                     b = c(33, 22, 11, 21, 45))


> Table2$a * Table1$x
[1] 16.0  3.5 32.5 21.5  1.5
  

Тот факт, что вы получаете ошибку, может означать, что с таблицей 1 что-то не так?

Комментарии:

1. Спасибо. Ваша догадка была верной. В файле CSV, который я использовал, были ошибки форматирования. Я вручную создал фрейм данных в коде. У меня было меньше ошибок, но одна все еще происходила (аналогично моему комментарию ниже Dason). Это было потому, что я неправильно назвал переменные. После этого все работает. Похоже, концепция ссылок на заблокированные ячейки ($ A $ 1) встроена в R. Спасибо!