#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. Спасибо!