Как создать столбец с каждым номером в строке в 10 раз меньшим, чем предыдущий номер? - PullRequest
0 голосов
/ 28 апреля 2019

Мне нужно создать фрейм данных со столбцом, заполненным числами Рунифа, но каждое число в строке в 10 раз меньше предыдущего (это должно быть сделано 5 раз). Таким образом, если первое число в первой строке равно 5, второе - в конце 0,5, 0,05, 0,005 и 0,0005. Например, в приведенном ниже коде создан фрейм данных, и я должен заменить первые пять значений в столбце OD, как описано выше.

levels <- c("ref", "treat", "control")
x <- as.factor(labels)
a <- levels[x]
values <- runif(25,min=0,max=25)
my.data <- data.frame(labels = a, OD=values)

1 Ответ

1 голос
/ 28 апреля 2019

Я дам вам подробный ответ.Вы хотели бы сделать каждое число в 10 раз меньше предыдущего, что можно сделать с помощью чего-то вроде:

runif(1, min=0, max=25) / 10 ^ (0:4)

Мы включаем 0 в экспоненты, чтобы сохранить исходное число.

Затем вы хотите применить эту операцию к каждому значению в values, чтобы вы могли использовать для этого sapply.

sapply(values, "/", 10 ^ (0:4))

Однако, когда каждый результат является вектором, sapply связывает их все столбец-поэтому мы переносим результат с помощью t.Поскольку вам нужен фрейм данных, вы можете просто получить:

data.frame(labels=a, t(sapply(values, "/", 10 ^ (0:4))))

И, возможно, впоследствии изменить имена столбцов с помощью colnames.

Кстати, ваш пример не воспроизводится, labels не определено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...