【发布时间】:2019-01-24 17:55:55
【问题描述】:
我有一个包含多列和多行的数据框 (df),例如:
A B C
0.6 a. b
0.9 c. d
1.1. e. f
1.2 g. h
1.4 I l
1.5. m. n
5.0 o. p
5.3 q. r
5.6. s. t
6.1. u v
6.5. w. z
6.9. y a
7.0. b. c
我正在寻找的代码应该计算 A 列中每个连续值之间的差异(0.9-0.3 = 0.3、1.1-0.9=0.2 等等),如果差异大于某个阈值(这里我们设置为 3,但可以不同)它将子集一定数量的行(在这种情况下假设为 3,但它也可以不同)在差异大于阈值设置的差距之前和之后。 因此,在这种情况下,5.0 - 1.5 = 3.5 大于 3,将保留 1.5 之前的 3 行和 5.0 之后的 3 行,其余的将被删除。 知道如何编写这样的代码吗?
输出:
A B C
1.1. e. f
1.2 g. h
1.4 I l
1.5. m. n
5.0 o. p
5.3 q. r
5.6. s. t
6.1. u v
我有多个数据框,因此 A 列中的值不同,代码应逐个查看每个数据框,并根据设置的阈值查找 A 列中的间隙在哪里。
dput 格式的数据。
输入:data.frame df1。
df1 <-
structure(list(A = c(0.6, 0.9, 1.1, 1.2, 1.4,
1.5, 4, 4.3, 4.6, 5.1, 5.5, 5.9, 6),
B = structure(c(1L, 3L, 4L, 5L, 6L, 7L, 8L,
9L, 10L, 11L, 12L, 13L, 2L), .Label = c("a.",
"b.", "c.", "e.", "g.", "I", "m.", "o.",
"q.", "s.", "u", "w.", "y"), class = "factor"),
C = structure(c(2L, 4L, 5L, 6L, 7L, 8L, 9L,
10L, 11L, 12L, 13L, 1L, 3L), .Label = c("a",
"b", "c", "d", "f", "h", "l", "n", "p",
"r", "t", "v", "z"), class = "factor")),
row.names = c(NA, -13L), class = "data.frame")
输出:data.frame out。
out <-
structure(list(A = c(1.1, 1.2, 1.4, 1.5, 4,
4.3, 4.6, 5.1), B = structure(1:8,
.Label = c("e.", "g.", "I", "m.", "o.",
"q.", "s.", "u"), class = "factor"),
C = structure(1:8, .Label = c("f", "h", "l",
"n", "p", "r", "t", "v"), class = "factor")),
row.names = c(NA, -8L), class = "data.frame")
这是我的 df:
structure(list(POS = c(207687374L, 207689227L, 207690871L, 207691563L,
207693563L, 207694165L, 207694357L, 207738077L, 207739127L, 207740272L,
207740868L, 207747296L, 207747984L, 207748107L), SNP = c("rs12130494",
"rs4844601", "rs10863358", "rs77357299", "rs12043913", "rs61822967",
"rs11117991", "rs7515905", "rs3886100", "rs12038575", "rs34883952",
"rs1752684", "rs17046851", "rs10127904"), Std_iHS = c(-1.52176,
-1.51905, -1.50286, 0.656487, -1.45251, 0.84325, -1.06089, -1.41041,
1.29513, 1.21325, 0.456717, -1.00933, -1.71468, 0.265969)), row.names =
21:34, class = "data.frame")
输出:
structure(list(POS = c(207691563L,
207693563L, 207694165L, 207694357L, 207738077L, 207739127L, 207740272L,
207740868L, ), SNP = c( "rs77357299", "rs12043913", "rs61822967",
"rs11117991", "rs7515905", "rs3886100", "rs12038575", "rs34883952",
), Std_iHS = c( 0.656487, -1.45251, 0.84325, -1.06089, -1.41041,
1.29513, 1.21325, 0.456717, )), row.names = 21:34, class = "data.frame")
【问题讨论】:
-
另外,为什么包含所需结果 (
e. f) 中的第一行?大跳跃前4行 -
当然,我会尝试使用 dput 并添加可重现的数据集;是的,第 1.1 行。 e. f 应该包括在内,因为它应该在间隙的第一个值 (1.5) 之前占用 3 行,在间隙的第二个值 (4.0) 之后占用 3 行
-
看看这些问题,它们可能会对你有所帮助:stackoverflow.com/questions/53622509/…, stackoverflow.com/questions/42925017/…
-
是的,我可以通过设置特定值来获取那些存在间隙位置的行中的“哪个”的索引,我试过了,我可以为单个数据帧做到这一点但我的问题是,间隙前后的两个值总是不同,具体取决于数据框,所以我不知道该怎么做,无论如何,谢谢
标签: r