[英]create multiple columns with each column as a sequence of numbers in R
問題:我想在我的數據框中添加三列,每列都是一個數字序列。 但我希望每一列都與另一列不同。 所以這是一個示例數據框:
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)
所以首先我擴展了我的數據框以容納我想要的 3 列的數字組合。 我使用 125 是因為每個序列有 5 個數字。
dataext <- data[rep(seq_len(nrow(data)), 125), ]
然后,我使用我想要的數字序列創建了我的新列:
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)
我想要的 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
我希望這足夠清楚。 非常感謝任何有關如何正確執行此操作的線索。 謝謝!
我還不能評論要求澄清,但您似乎想要 group1、group2、rate、var1、var2 和 var3 之間的每個組合。
您可以使用 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)
如果您只是在尋找您已經擁有的 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)
所以,我忘記了有一個用於檢查列組合的expand.grid
選項。 這是我獲得所需數據框的方式。
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
我手動檢查了生成的數據框,但我也嘗試了 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)
我認為它奏效了。 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.