r - 有效地确定与条目相同的值包围的向量的条目
问题描述
我似乎无法很好地制定标题。
这是一个显示预期结果的快速示例!如您所见,我可以自己解决问题,但是当我觉得向量很大时,代码效率很低。有没有更聪明的方法(肯定有)?
input_data=c(1,1,1,3,5,5,5,10,10,10,10,11,15,15,15,15,15,8,9)
expected_result=rep(TRUE,length(input_data))
for (k in 1:(length(input_data)-2)) {
if (input_data[k]==input_data[k+1] & input_data[k+1]==input_data[k+2]) {
expected_result[k+1]=FALSE
}
}
print(expected_result)
提前致谢!
解决方案
数据表方法
代码
library( data.table )
data.table( input = input_data )[, output := ifelse( input == shift( input, type = "lead", fill = FALSE) & input == shift( input, type = "lag", fill = FALSE), TRUE, FALSE)][[2]]
输出
#[1] FALSE TRUE FALSE FALSE FALSE TRUE FALSE FALSE TRUE TRUE FALSE FALSE FALSE TRUE TRUE TRUE FALSE FALSE FALSE
功能性
data.table
从向量创建一个input_data
。
检查上一个值和下一个值是否等于当前值(使用shift
)。
如果上一个和下一个与当前相同,则将缺失值(第一个和最后一个)填充为 FALSE,结果 = TRUE 否则,结果为 FALSE。
将结果写入新列名称output
[[2]]
是将新创建的输出列导出为向量。
推荐阅读
- python - 为什么 QTextEdit 有时会在 Ubuntu 20.04 上多次发出 textChanged?
- javascript - 如何从我的 vue.js 应用程序中打开 AutoCAD 程序?
- node.js - React JS - “npm start”第二次不起作用
- javascript - 使用 AudioWorkletProcessor 进行低延迟音频调度?
- amazon-web-services - AWS 1 个子域与多个 AWS ELB 共享
- sql - 如何在 MS-Access 中创建查询/表,在其中计算某些大写括号中的客户?
- python - 树莓派零python版本3.7.3中没有模块名称键盘
- php - 如何创建将消息发送到电子邮件地址的聊天室
- cas - 用于测试客户端代码的公共 CAS 服务器
- python - 我将如何使用 BeautifulSoup 来解析其中的文本?