简体   繁体   English

在 R 中创建多列,每列作为数字序列

[英]create multiple columns with each column as a sequence of numbers in R

Problem: I wanted to add three columns in my data frame with each column being a sequence of numbers.问题:我想在我的数据框中添加三列,每列都是一个数字序列。 But I want each column to vary with the other column.但我希望每一列都与另一列不同。 So here's an example data frame:所以这是一个示例数据框:

data <- read.table(text="
group1  group2  rate
A     D     0.01     
A     D     0.001
A     D     0.0001  
B     D     0.01    
B     D     0.001      
B     D     0.0001
D     A     0.01     
D     A     0.001
D     A     0.0001  
D     B     0.01    
D     B     0.001      
D     B     0.0001",
                   header=TRUE)

So first I extended my data frame to accommodate the combinations of numbers that I want for the 3 columns.所以首先我扩展了我的数据框以容纳我想要的 3 列的数字组合。 I used 125 because I have 5 numbers for each sequence.我使用 125 是因为每个序列有 5 个数字。

dataext <- data[rep(seq_len(nrow(data)), 125), ]

Then, I created my new column using the sequence of number that I want:然后,我使用我想要的数字序列创建了我的新列:

dataext$var1 <- rep_len (seq(0,1, 0.25), length.out=125)
dataext$var2 <- rep_len (seq(0,1, 0.25), length.out=125)
dataext$var3 <- rep_len (seq(0,1, 0.25), length.out=125)

An example of my desired output is:我想要的 output 的一个例子是:

group1  group2  rate    var1    var 2   var3
    A     D     0.01     0      0       0           
    A     D     0.001    0      0       0               
    A     D     0.0001   0      0       0
    A     D     0.01     0.25   0       0           
    A     D     0.001    0.25   0       0               
    A     D     0.0001   0.25   0       0
    A     D     0.01     0.25   0.25    0           
    A     D     0.001    0.25   0.25    0               
    A     D     0.0001   0.25   0.25    0
    A     D     0.01     0.25   0.25    0.25            
    A     D     0.001    0.25   0.25    0.25                
    A     D     0.0001   0.25   0.25    0.25

I hope this is clear enough.我希望这足够清楚。 Any leads on how to do it right are greatly appreciated.非常感谢任何有关如何正确执行此操作的线索。 Thanks!谢谢!

I cannot comment yet to ask for clarification, but it appears that you want every combination between group1, group2, rate, var1, var2, and var3.我还不能评论要求澄清,但您似乎想要 group1、group2、rate、var1、var2 和 var3 之间的每个组合。

You can use expand.grid to achieve this.您可以使用 expand.grid 来实现这一点。

data <- read.table(text="
group1  group2  rate
                   A     D     0.01     
                   A     D     0.001
                   A     D     0.0001  
                   B     D     0.01    
                   B     D     0.001      
                   B     D     0.0001
                   D     A     0.01     
                   D     A     0.001
                   D     A     0.0001  
                   D     B     0.01    
                   D     B     0.001      
                   D     B     0.0001",
                   header=TRUE)

g1 <- levels(data$group1)
g2 <- levels(data$group2)
r <- levels(factor(data$rate))
var1 <- var2 <- var3 <- factor(seq(0,1,0.25))

dataout <- expand.grid(g1,g2,r,var1,var2,var3)

colnames(dataout) <- c("group1", "group2", "rate","var1","var2","var3")

View(dataout)

If you are just looking for the specific combinations you already have for group1, group2, and rate you can make a new column indicating those unique combinations and run the expand.grid如果您只是在寻找您已经拥有的 group1、group2 和 rate 的特定组合,您可以创建一个新列来指示这些唯一组合并运行 expand.grid

data <- read.table(text="
group1  group2  rate
                   A     D     0.01     
                   A     D     0.001
                   A     D     0.0001  
                   B     D     0.01    
                   B     D     0.001      
                   B     D     0.0001
                   D     A     0.01     
                   D     A     0.001
                   D     A     0.0001  
                   D     B     0.01    
                   D     B     0.001      
                   D     B     0.0001",
                   header=TRUE)
dataext <- data[rep(seq_len(nrow(data)), 125), ]

data$key <- seq(1:length(data$group1))

dataout2 <- expand.grid(data$key,var1,var2,var3)
colnames(dataout2) <- c("key","var1","var2","var3")

datafin <- cbind(dataext,dataout2[2:4])

View(datafin)

So, I forgot that there is an expand.grid option for checking column combinations.所以,我忘记了有一个用于检查列组合的expand.grid选项。 Here's how I got the data frame that I want.这是我获得所需数据框的方式。

a <- list (var1 = (seq(0,1, 0.25)), var2 = (seq(0,1, 0.25)), var3 = (seq(0,1, 0.25)) )
c<- expand.grid(a)
expv<- c[rep(seq_len(nrow(c)), 12), ]

dataext$var1 <- expv$var1
dataext$var2 <- expv$var2
dataext$var3 <- expv$var3

I checked manually the resulting data frame but I also tried to plot it.我手动检查了生成的数据框,但我也尝试了 plot 它。

datamelt <- melt(dataext, id.vars = c ("group1", "group2", "rate"), value.name= "val", variable.name ="varsname" )

ggplot(datamelt, aes(x=as.factor(rate), y=val, color=varsname)) + geom_point(position=position_jitterdodge()) + facet_grid(group1~group2)

I think it worked.我认为它奏效了。 :) :)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM