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

问题描述 投票:0回答:1

我必须创建一个数据框,其中一列填充了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)
r
1个回答
1
投票

我会给你一个详细的答案。你想让每个数字比前一个小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没有定义。

© www.soinside.com 2019 - 2024. All rights reserved.