当前位置: 首页 > 知识库问答 >
问题:

每增加n个范围R

司徒翼
2023-03-14

我在写R代码,其中有一个向量“x”,它包含1到100的值,我想创建另一个向量“y”,它在每n个范围内子集一个值的范围。我确信我可以使用rep()和seq(),但我无法找到获得所需的代码。下面是输出应该是什么样子

x <- 1:100

y <- 1 2 3 11 12 13 21 22 23 31 32 33 41 42 43 51 52 53 61 62 63 71 72 73 81 82 83 91 92 93

所以如果我有一个向量x

  1001 1002 1003 1011 1012 1013 1021 1022 1023 1031 1032 1033 1041 1042 1043...etc

有什么想法吗?

共有3个答案

吕灿
2023-03-14

也许这可以帮助你:

x <- 1:100
y <- as.integer()
for(i in seq(1, length(x), 10)) {
    y <- append(y, c(x[i], x[i+1], x[i+2]))
}
宗翔宇
2023-03-14

为了好玩,使用外部

x <- 1001:1100
y <- as.vector(outer(1:3, seq(0, length(x)-10, 10), "+"))
x[y]
#  [1] 1001 1002 1003 1011 1012 1013 1021 1022 1023 1031 1032 1033 1041 1042 1043
# [16] 1051 1052 1053 1061 1062 1063 1071 1072 1073 1081 1082 1083 1091 1092 1093

长孙雅志
2023-03-14

您可以使用grepl

x <- 1001:1100
y <- grepl("[1-3]$", x)
x[y]
# [1] 1001 1002 1003 1011 1012 1013 1021 1022 1023 1031 1032 1033 1041 1042 1043 1051 1052
#[18] 1053 1061 1062 1063 1071 1072 1073 1081 1082 1083 1091 1092 1093

它只需检查x的每个元素的最后一个数字是否在1、2或3的范围内,如果是,则返回TRUE,否则返回FALSE。然后使用此逻辑索引对x进行子集划分。

如果您的目标不是将以1、2或3结尾的元素子集,而是始终将3个元素子集,然后省略7个,然后再次将3个元素子集等等。。。你可以做:

x <- 1001:1100
y <- rep(c(TRUE, FALSE), c(3, 7))
x[y]
# [1] 1001 1002 1003 1011 1012 1013 1021 1022 1023 1031 1032 1033 1041 1042 1043 1051 1052
#[18] 1053 1061 1062 1063 1071 1072 1073 1081 1082 1083 1091 1092 1093

在这种情况下,向量y也是逻辑的,它被循环使用-注意length(x)应该可以被length(y)整除,这样才能正常工作。

 类似资料:
  • 问题内容: 如何调整以下CSS选择器: 所以它适用于TD列2-4? 问题答案: 您将无法一次完成此操作-您将需要链接至少一个其他此类伪类。例如,的组合和(该位装置开始从第二子分别计数向前和向后): 或者,不使用公式,只需排除和:

  • 本文向大家介绍R范围和加法,包括了R范围和加法的使用技巧和注意事项,需要的朋友参考一下 示例 让我们以将值添加到范围为例(例如,可以在循环中完成): 给出: 这是因为范围运算符的:优先级高于加法运算符+。 评估期间会发生以下情况: 3+1:5 3+c(1, 2, 3, 4, 5) 扩展范围运算符以生成整数向量。 c(4, 5, 6, 7, 8) 向量的每个成员加3。 为了避免这种行为,您必须告诉R

  • 问题内容: 我知道如何在Python范围内生成随机数。 我知道我可以将其循环生成n个数量的这些数字 但是,我需要确保该列表中的每个数字都是唯一的。除了大量的条件语句之外,还有一种直接的方法可以生成n个唯一的随机数吗? 重要的是列表中的每个数字都不同。 所以 [12,5,6,1] =好 但 [12,5,5,1] =不好,因为数字5出现两次。 问题答案: 如果您只需要采样而无需更换: random.s

  • 试图编写一个程序,将找到阶乘的范围内的数字从1到N,N是最后的数字找到阶乘,我写了一个非递归program.it只适用于整数1和2在循环中,我不知道如何修复它,因为逻辑似乎很好,我也有点还是一个初学者,所以我知道我可能错过了一些明显的东西,但在任何情况下,这里的代码:

  • 我正在尝试在我的应用程序中添加一些标记到所有跟踪中。我尝试扩展DefaultMessageSpanCustomizer,但没有成功,如以下文档所示 但不幸的是,我不能让它工作。是否有人成功地尝试为每个应用程序跟踪添加一些标记? 非常感谢你的帮助。 乔纳森。

  • 问题内容: 在这里,最低年龄是10岁,因此我们首先计算范围10-15。该范围内有5个学生。对于第二个范围,我们需要找到年龄> 15(即18)。因此,第二个范围是18-23,依此类推。如果能自动计算范围并计算该范围内的数据,我将不胜感激。 问题答案: 您可以在SUM()语句中使用条件来获取该条件所在的计数。我会计算年龄在BETWEEN()必要范围内的条件。试试这个: 这只会返回一行,但是它将包含您需