【问题标题】:Test if element is in a list and return 0 or 1测试元素是否在列表中并返回 0 或 1
【发布时间】:2016-06-03 13:04:20
【问题描述】:

我目前正在尝试检查一个元素是否是列表的一部分,如果是则返回 1,否则返回 0。

我一直在为此做一个循环,但由于矩阵将非常大(这里仅提供一个简单的示例),我想知道是否有一种有效的方法来做到这一点。

rm(list=ls())   # clear memory
names <- c("a","b","c","d","e","f","g","h","i","j","k50","l50","m50","n50","o50")

proba <- c(1,1,1,1,1,1,1,1,1,1,0.5,0.5,0.5,0.5,0.5)

T1_temp <- sample(names,4,prob=proba)

# Loop to check which element of T1_temp is included in names
T1 <- c()
for (i in 1:length(names)){
  if (is.element(names[i],T1_temp)){T1[i]=1}
  else{T1[i]=0}
}

结果是

 [1] 0 1 0 0 1 1 0 0 1 0 0 0 0 0 0

【问题讨论】:

  • @Donkey Kong 感谢您重塑我的问题并感谢 jogo 的提示

标签: r performance loops


【解决方案1】:

我们可以试试%in%

as.integer(names %in% T1_temp)

match

 +(!is.na(match(names,T1_temp)))

【讨论】:

  • 感谢您的快速回答(在我提出问题后大约 1 分钟,这太棒了)。这是完美的。这正是我想要避免许多循环。
  • @akrun 确定我只需要等待 10 分钟 :) 享受
猜你喜欢
  • 1970-01-01
  • 2011-12-04
  • 2021-09-01
  • 2016-01-24
  • 2021-09-12
  • 1970-01-01
  • 1970-01-01
  • 2021-11-13
  • 1970-01-01
相关资源
最近更新 更多