提取具有两个其他值之间的值的数据框行

本森

我有一些包含七列的数据前六个是物体横截面的空间坐标,单位为米,相对于左下角的 X=0 Y=0 点。形状的横截面由镶嵌三角形的网格组成,每个点坐标 (X1,Y1.X2,Y2.X3,Y3) 代表三角形的角。第七列 (Z) 是从分配给三角形的分析得出的值,该三角形已由三点坐标进行。

我试图通过形状中间的窄带提取点坐标和“Z”列数据。我在这里查看并使用了 David Arenburg 的代码和data.table包,但我似乎无法让它工作;也许是因为我有两列以上的数据?

我需要做的是通过形状的几何中心(其高度的一半)在 1 厘米宽的水平带内提取坐标和 Z 数据。如果任何三角形的任何点坐标落在 1 cm 范围内,我想要整行数据;理想情况下在单独的数据框中。

这是我到目前为止所拥有的:

data<-sample_data
attach(data)
upper<-(max(data$Y3)/2)+0.005 # the horizontal centreline of the shape plus half a cm
lower<-(max(data$Y3)/2)-0.005 # the horizontal centreline of the shape minus half a cm
library(data.table)
(data[between(data,lower,upper,incbounds=FALSE)])

我也试过这些,但得到相同的错误信息

data[data>lower&data<upper]
data[sapply(data,function(x)x>lower&x<upper)]

# Error: Unsupported use of matrix or array for column indexing

如果您想查看它,您可以使用此代码绘制形状。

plot(X1,Y1,pch=19,cex=0.6)
points(X2,Y2,pch=19,cex=0.6)
points(X3,Y3,pch=19,cex=0.6)

希望我已经很好地解释了这一点,以便有人提供一些帮助

谢谢

乌韦

OP 已要求

通过形状的几何中心(其高度的一半)提取 1 厘米宽的水平带内的坐标和 Z 数据。如果任何三角形的任何点坐标落在 1 cm 范围内,我想要整行数据;理想情况下在单独的数据框中。

不幸的是,问题本身以及接受的答案只检查Y点 3 的Y值,而不检查点 1 和点 2值。这不符合上述选择任何点坐标的三角形的要求,即,点 1、23 落在 1 厘米范围内。

所以,这里的关键问题是选择相关的三角形而不是单个

下面,有两种data.table解决方案。第一个是使用 OP 提供的宽格式数据,第二个是使用长格式的数据来简化代码。

宽幅

library(data.table)
# read data from dropbox
DT <- fread("https://www.dropbox.com/s/2h8oq8nzrr5jsnm/sample_data.csv?dl=1")
# compute horizontal band through the geometric center of the shape
lower <- DT[, mean(range(c(Y1, Y2, Y3)))] - 0.01 / 2
upper <- lower + 0.01
# select row if y value of any point is within the horizontal band 
DT[lower < Y1 & Y1 < upper | lower < Y2 & Y2 < upper | lower < Y3 & Y3 < upper]
             X1       Y1         X2       Y2         X3       Y3        Z
  1: 0.00737923 0.218856 0.00710657 0.215950 0.01030030 0.217116  37.1608
  2: 0.00517517 0.220532 0.00737923 0.218856 0.00761518 0.221670  57.6568
  3: 0.00679651 0.212962 0.00448935 0.214803 0.00407957 0.211809  16.6649
  4: 0.00407957 0.211809 0.00644539 0.209902 0.00679651 0.212962  15.2068
  5: 0.38168000 0.214740 0.38544600 0.212670 0.38533400 0.217001  28.2365
 ---                                                                     
177: 0.08690940 0.224751 0.07950840 0.237030 0.07896900 0.222427  86.2424
178: 0.08690940 0.224751 0.07896900 0.222427 0.08592510 0.216536  87.3141
179: 0.31252100 0.204228 0.30390000 0.214336 0.30509100 0.195766 127.5630
180: 0.01912900 0.209566 0.02296630 0.206891 0.02147170 0.214579  40.5351
181: 0.01912900 0.209566 0.02147170 0.214579 0.01702550 0.210148  37.3207

请注意,mean(range(c(Y1, Y2, Y3)))用于计算几何中心的 y 值而不是max(data$Y3)/2因为 y 值的范围扩展到 0 以下:

DT[, range(c(Y1, Y2, Y3))]
[1] -0.00171812  0.43692700

此外,条件
lower < Y1 & Y1 < upper | lower < Y2 & Y2 < upper | lower < Y3 & Y3 < upper
选择了 181 个三角形,而使用仅lower < Y3 & Y3 < upper选择了 93 个三角形。

绘制数据

使用data.table语法,可以绘制数据:

# plot all points
DT[, {plot(X1,Y1,pch=19,cex=0.6)
  points(X2,Y2,pch=19,cex=0.6)
  points(X3,Y3,pch=19,cex=0.6)}]
# plot points of selected triangles
DT[lower < Y1 & Y1 < upper | lower < Y2 & Y2 < upper | lower < Y3 & Y3 < upper, 
   {points(X1,Y1,pch=19,cex=0.6, col = "red")
     points(X2,Y2,pch=19,cex=0.6, col = "red")
     points(X3,Y3,pch=19,cex=0.6, col = "red")}]

在此处输入图片说明

长格式

每个三角形由 3 个 x 和 y 坐标(加上一个 z 值)形成。如果将数据从宽格式改成长格式,可以精简代码:

# reshape from wide to long with two value columns
mDT <- melt(DT, measure.vars = patterns("X", "Y"), value.name = c("X", "Y"))[
  # append column with triangle id
  , tn := rowid(variable)]
# compute range of horizontal band
Y_range <- mDT[, mean(range(Y)) + 0.005 * c(-1, 1)]
# get triangle ids which fulfill condition and subset original data set
DT[mDT[between(Y, Y_range[1], Y_range[2], FALSE), unique(tn)]]
             X1       Y1         X2       Y2         X3       Y3        Z
  1: 0.00737923 0.218856 0.00710657 0.215950 0.01030030 0.217116  37.1608
  2: 0.00517517 0.220532 0.00737923 0.218856 0.00761518 0.221670  57.6568
  3: 0.00679651 0.212962 0.00448935 0.214803 0.00407957 0.211809  16.6649
  4: 0.38168000 0.214740 0.38544600 0.212670 0.38533400 0.217001  28.2365
  5: 0.00485705 0.217712 0.00710657 0.215950 0.00737923 0.218856  35.5559
 ---                                                                     
177: 0.07138950 0.230589 0.06918600 0.223825 0.07896900 0.222427  69.3878
178: 0.31531000 0.223694 0.31960800 0.208014 0.32479400 0.215728 104.4240
179: 0.36601500 0.211508 0.37193400 0.210487 0.36756700 0.217592  42.0580
180: 0.08690940 0.224751 0.07950840 0.237030 0.07896900 0.222427  86.2424
181: 0.01912900 0.209566 0.02296630 0.206891 0.02147170 0.214579  40.5351

再次选择了 181 个三角形。长格式对于绘图也更方便:

# plot all points
mDT[, plot(X, Y, pch = 19, cex = 0.6)]
# plot points of selected triangles
# using a right join on the triangle ids of the selected triangles
mDT[mDT[between(Y, Y_range[1], Y_range[2], FALSE), .(tn = unique(tn))], on = "tn",
    points(X, Y , pch = 19, cex = 0.6, col = "red")]

在此处输入图片说明

错误信息说明

OP 报告以下行返回错误消息:

data[between(data,lower,upper,incbounds=FALSE)]
data[data>lower&data<upper]
data[sapply(data,function(x)x>lower&x<upper)]

原因是整个data对象用于子集条件而不是单个列向量。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

熊猫在具有数字约束的数据框中的两个行值之间添加其他值

来自分类Dev

如何获取包含两个其他值之间的值的数据框的行?

来自分类Dev

熊猫如何在数据框的两个行值之间添加其他值

来自分类Dev

获取具有其他两个之间的绝对差异的数据框

来自分类Dev

更新列值以反映具有两个不同大小的数据帧的其他列值

来自分类Dev

如何在两个熊猫数据框之间循环,以根据数据框1中给出的值选择要从数据框2中提取的行范围

来自分类Dev

如何从两个 Pandas 数据框中切片行,然后将它们与其他值合并

来自分类Dev

如何在两个数据表之间提取具有特定列和值的行?

来自分类Dev

如何在数据框中为列查找具有相同值(字符串)的两个连续行并在它们之间添加更多行?

来自分类Dev

确保数据框列中的所有值都在两个值之间

来自分类Dev

如何获得2列中具有相同条件的值,且与其他两个条件具有不同值的行

来自分类Dev

如何获得2列中具有相同条件的值,且与其他两个条件具有不同值的行

来自分类Dev

如何获得2列中具有相同条件的值,且与其他两个条件具有不同值的行

来自分类Dev

两个表获取其他表中具有共同值或没有值的值

来自分类Dev

生成两个值(OCaml或其他语言)之间给定长度的所有列表

来自分类Dev

R-将数据帧合并为具有其他“值之间”条件的两列?

来自分类Dev

如何通过匹配R中的其他两个列将一列中的值提取到数据框中

来自分类Dev

一个表中有两个具有相同ID的元组,并且这两行的其他一些列的值不同

来自分类Dev

如何从具有空值的数据框列中提取两个子字符串之间的所有字符串?

来自分类Dev

使用Groupby构造一个具有其他列的值计数的数据框

来自分类Dev

如果值不在同一列的其他两个值之间,则删除熊猫行

来自分类Dev

两个日期值之间具有精确的差值

来自分类Dev

合并两个具有相似值但日期熊猫不同的不同数据框

来自分类Dev

两个 Pandas 数据框的相关矩阵,具有 P 值

来自分类Dev

当其他两个列具有相等的值时,用另一列替换该列的值

来自分类Dev

如何检查其他两个值之间是否包含一个值?

来自分类Dev

提取在R数据框中具有共同值的行

来自分类Dev

并行显示的两个列具有不同的列名和行大小,但重合值很少的数据框的结果数据框

来自分类Dev

Python连接两个数据框以查找相同的行值,在相应的行中具有不同的值

Related 相关文章

  1. 1

    熊猫在具有数字约束的数据框中的两个行值之间添加其他值

  2. 2

    如何获取包含两个其他值之间的值的数据框的行?

  3. 3

    熊猫如何在数据框的两个行值之间添加其他值

  4. 4

    获取具有其他两个之间的绝对差异的数据框

  5. 5

    更新列值以反映具有两个不同大小的数据帧的其他列值

  6. 6

    如何在两个熊猫数据框之间循环,以根据数据框1中给出的值选择要从数据框2中提取的行范围

  7. 7

    如何从两个 Pandas 数据框中切片行,然后将它们与其他值合并

  8. 8

    如何在两个数据表之间提取具有特定列和值的行?

  9. 9

    如何在数据框中为列查找具有相同值(字符串)的两个连续行并在它们之间添加更多行?

  10. 10

    确保数据框列中的所有值都在两个值之间

  11. 11

    如何获得2列中具有相同条件的值,且与其他两个条件具有不同值的行

  12. 12

    如何获得2列中具有相同条件的值,且与其他两个条件具有不同值的行

  13. 13

    如何获得2列中具有相同条件的值,且与其他两个条件具有不同值的行

  14. 14

    两个表获取其他表中具有共同值或没有值的值

  15. 15

    生成两个值(OCaml或其他语言)之间给定长度的所有列表

  16. 16

    R-将数据帧合并为具有其他“值之间”条件的两列?

  17. 17

    如何通过匹配R中的其他两个列将一列中的值提取到数据框中

  18. 18

    一个表中有两个具有相同ID的元组,并且这两行的其他一些列的值不同

  19. 19

    如何从具有空值的数据框列中提取两个子字符串之间的所有字符串?

  20. 20

    使用Groupby构造一个具有其他列的值计数的数据框

  21. 21

    如果值不在同一列的其他两个值之间,则删除熊猫行

  22. 22

    两个日期值之间具有精确的差值

  23. 23

    合并两个具有相似值但日期熊猫不同的不同数据框

  24. 24

    两个 Pandas 数据框的相关矩阵,具有 P 值

  25. 25

    当其他两个列具有相等的值时,用另一列替换该列的值

  26. 26

    如何检查其他两个值之间是否包含一个值?

  27. 27

    提取在R数据框中具有共同值的行

  28. 28

    并行显示的两个列具有不同的列名和行大小,但重合值很少的数据框的结果数据框

  29. 29

    Python连接两个数据框以查找相同的行值,在相应的行中具有不同的值

热门标签

归档