R 如何创建一个列,使行中的每个数字比上一个数字小10倍?

R 如何创建一个列,使行中的每个数字比上一个数字小10倍?,r,R,我必须创建一个数据框,其中的列中填充了runif数字,但行中的每个数字都比前一个小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,m

我必须创建一个数据框,其中的列中填充了runif数字,但行中的每个数字都比前一个小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)

我会给你一个详细的答复。 你想让每个数字比前一个小10倍, 这可以通过以下方式实现:

runif(1, min=0, max=25) / 10 ^ (0:4)
我们在指数中包含0以保持原始数字

然后要将该操作应用于值中的每个值, 所以你可以用sapply

sapply(values, "/", 10 ^ (0:4))
然而,当每个结果都是一个向量时,sapply将它们按列绑定, 所以我们把结果转置为t。 由于您需要一个数据帧,因此可以简单地以以下方式结束:

data.frame(labels=a, t(sapply(values, "/", 10 ^ (0:4))))
然后可能会用colnames调整列名

顺便说一句,您的示例不可复制,标签未定义。

SAPPY和转置的替代方法:data.frameoutervalues,1/10^0:4哦,是的,我总是忘记外部。它也可以是外部值,10^0:4,/。