如何每隔一行向R数据框添加行?

a d*_*ben 6 r dataframe rgl

简介:如何m在我的m X n数据框中添加行,每个新行在每个现有行之后插入?我将基本上复制现有行,但对一个变量进行更改.

更多细节:在提到另一个问题时,我想我可以用rgl的segments3d函数做我想做的事.我有一组x,y,z点,但这些只是一组线段的一个终点.另一个终点在Z维度上距离很远,作为第四个变量:X,Y,Z,Z_Length; 在我的术语中它是东,北,海拔,长度.

根据rgl文档,"Points由seg3d成对拍摄".因此,我认为我需要修改我的数据框,以便每隔一行使用一个改变的Z变量(通过从Z减去Z_Length)来获得额外的条目.在视觉上,它需要从这个:

+-------+---------+----------+-----------+---------+
| Label | easting | northing | elevation | length  |
+-------+---------+----------+-----------+---------+
| 47063 |  554952 |  5804714 | 32.68     | 619.25  |
| 47311 |  492126 |  5730703 | 10.40     | 1773.00 |
+-------+---------+----------+-----------+---------+
Run Code Online (Sandbox Code Playgroud)

对此:

+-------+---------+----------+-----------+---------+
| Label | easting | northing | elevation | length  |
+-------+---------+----------+-----------+---------+
| 47063 |  554952 |  5804714 | 32.68     | 619.25  |
| 47063 |  554952 |  5804714 | -586.57   | 619.25  |
| 47311 |  492126 |  5730703 | 10.40     | 1773.00 |
| 47311 |  492126 |  5730703 | -1762.26  | 1773.00 |
+-------+---------+----------+-----------+---------+
Run Code Online (Sandbox Code Playgroud)

可以获得链接问题的数据样本.

flo*_*del 8

您的样本数据:

orig.df <- read.table(text = "
Label easting northing elevation length
47063  554952  5804714 32.68 619.25 
47311  492126  5730703 10.40 1773.00", header = TRUE)
Run Code Online (Sandbox Code Playgroud)

创建要插入的数据:

insert.df <- transform(orig.df, elevation = elevation - length)
Run Code Online (Sandbox Code Playgroud)

将其附加到您的原始数据:

out.df <- rbind(orig.df, insert.df)
Run Code Online (Sandbox Code Playgroud)

重新排序行:

n <- nrow(orig.df)
out.df[kronecker(1:n, c(0, n), "+"), ]
#   Label easting northing elevation  length
# 1 47063  554952  5804714     32.68  619.25
# 3 47063  554952  5804714   -586.57  619.25
# 2 47311  492126  5730703     10.40 1773.00
# 4 47311  492126  5730703  -1762.60 1773.00
Run Code Online (Sandbox Code Playgroud)

  • 我以为我需要在我的解决方案中使用某种某种东西,但克罗内克并不是我所期望的......你能解释一下它是如何做到这一点的吗? (2认同)
  • 看看`kronecker(1:5,c(0,5),"+")`给你什么.对于第一个向量中的每个元素,它添加(`FUN ="+"`)第二个向量中的所有元素,因此得到:`1 + 0,1 + 5,2 + 0,2 + 5等. `.当然还有其他方法可以获得指数矢量,但我觉得这个很有意思. (2认同)
  • 那太狂野了,我喜欢它.你的大脑以美妙的方式运作. (2认同)

Nis*_*nth 5

我不确定如何rgl在这里发挥作用,但如果你只想创建一个data.frame具有重复值的新的,请尝试:

df[rep(1:nrow(df),1,each=2),]
Run Code Online (Sandbox Code Playgroud)