在R中复制和更改数据帧

在R中复制和更改数据帧,r,R,嗨,我正在尝试复制一个数据帧,然后根据复制编号更改我的一个名为“I”的列进行迭代 例如,我的起始数据框是: dataframex <- data.frame(i = c(1, 1, 1), x = c(1, 3, 5), y = c(2, 4, 6)) dataframex # i x y # 1 1 1 2 # 2 1 3 4 # 3 1 5 6 但我真正想要的是: # i

嗨,我正在尝试复制一个数据帧,然后根据复制编号更改我的一个名为“I”的列进行迭代

例如,我的起始数据框是:

dataframex <- data.frame(i = c(1, 1, 1),
                         x = c(1, 3, 5),
                         y = c(2, 4, 6))
dataframex 
#   i x y
# 1 1 1 2
# 2 1 3 4
# 3 1 5 6
但我真正想要的是:

#     i x y
# 1   1 1 2
# 2   1 3 4
# 3   1 5 6
# 1.1 2 1 2
# 2.1 2 3 4
# 3.1 2 5 6
# 1.2 3 1 2
# 2.2 3 3 4
# 3.2 3 5 6
i、 e.迭代列表示我拥有的复制数据集的数量。然后我想使用迭代列将此数据帧与另一个数据帧合并

另外,很抱歉,这是我第一次使用stackoverflow,我不知道如何制作表格,所以我希望您能理解我的临时列分隔符。

设置数据:

test <- read.table(textConnection("i x y
1 1 2
1 3 4
1 5 6"),header=TRUE)

> test
  i x y
1 1 1 2
2 1 3 4
3 1 5 6

三种可能的方法:

你的数据

DF <- data.frame(i=1,x=1:3,y=4:6)
# create a list with your data replicated three times
df_list <- replicate(n = 3, DF, simplify = F)
# go along this list and add a replicate column as `i`
df_list <- mapply(function(x,value,i) {x[,i] <- value;x}, value = seq_along(df_list), x = df_list, MoreArgs = list(i='i'), SIMPLIFY = F)
# combine into a data.frame
do.call(rbind,df_list)
使用初始方法
new\u DF最好的方法是包含
dput(您的数据)
的结果,然后将其格式化为代码。感谢您如此迅速的响应,命令工作得非常好!
result <- do.call(rbind,lapply(1:3,function(i) data.frame(i,test[-1])))

> result
  i x y
1 1 1 2
2 1 3 4
3 1 5 6
4 2 1 2
5 2 3 4
6 2 5 6
7 3 1 2
8 3 3 4
9 3 5 6
DF <- data.frame(i=1,x=1:3,y=4:6)
# create a list with your data replicated three times
df_list <- replicate(n = 3, DF, simplify = F)
# go along this list and add a replicate column as `i`
df_list <- mapply(function(x,value,i) {x[,i] <- value;x}, value = seq_along(df_list), x = df_list, MoreArgs = list(i='i'), SIMPLIFY = F)
# combine into a data.frame
do.call(rbind,df_list)
# don't have `i` defined yet
DF <- data.frame(x=1:3,y=1:4)
# add and combine into a data.frame
do.call(rbind,lapply(1:3, function(i,data) {data$i <- i;data}, data = DF))
##  i x y
## 1 1 1 4
## 2 1 2 5
## 3 1 3 6
## 4 2 1 4
## 5 2 2 5
## 6 2 3 6
## 7 3 1 4
## 8 3 2 5
## 9 3 3 6
new_DF <- DF[rep(1:nrow(DF), times=3), ]
new_DF$i <- rep(1:nrow(DF), times = 3)
new_DF
##     i x y
## 1   1 1 4
## 2   2 2 5
## 3   3 3 6
## 1.1 1 1 4
## 2.1 2 2 5
## 3.1 3 3 6
## 1.2 1 1 4
## 2.2 2 2 5
## 3.2 3 3 6