提问人:Rustam 提问时间:2/16/2023 最后编辑:MaëlRustam 更新时间:2/16/2023 访问量:73
如何删除 R 中的每 n 个行范围
how to delete every nth range of rows in R
问:
假设我有一个数据帧 df,它包含 450 行。我想删除从 10 到 18 的行(即 10、11、12、13、14、15、16、17、18)。然后从 28 到 36 同样地排,然后是 46:54。依此类推,直到删除从 442 到 450 的行。
伙计们,有什么建议吗?
答:
3赞
Maël
2/16/2023
#1
创建一个并删除这些行。第一个参数 , 是每个序列的长度(8,对每个序列重复);第二个 , 是每个序列 (10, 28, ...) 的起点。sequence
nvec
from
n = 450
len = n %/% 18
s <- sequence(nvec = rep(9, len), from = seq(10, n, 18))
# [1] 10 11 12 13 14 15 16 17 18 28 29 30 31 32 33 34
# [17] 35 36 46 47 48 49 50 51 52 53 54 64 65 66 67 68
# [33] 69 70 71 72 82 83 84 85 86 87 88 89 90 100 101 102
# ...
your_df[-s, ]
您还可以像这样创建序列:
rep(10:18, len) + rep(18*(0:(len - 1)), each = 9)
# [1] 10 11 12 13 14 15 16 17 18 28 29 30 31 32 33 34
# [17] 35 36 46 47 48 49 50 51 52 53 54 64 65 66 67 68
# [33] 69 70 71 72 82 83 84 85 86 87 88 89 90 100 101 102
# ...
评论
0赞
Rustam
2/16/2023
谢谢,它奏效了!唯一奇怪的部分是“序列”没有删除最后 9 行,442-450
1赞
Maël
2/16/2023
请参阅编辑。只需将 1 加到 len
0赞
Rustam
2/17/2023
对不起,伙计,我没有得到你的最后一点。你在哪里加了 1 到 len –?我尝试了两种“序列”方式,但结果是一样的,它没有删除最后 9 行,442-450。
1赞
Maël
2/17/2023
我更改了对象。编辑前是 24 岁,现在是 25 岁。 包括 442-450len
s
评论