2016-02-22 41 views
3

我目前正在尝试检查元素是否为列表的一部分,如果是大小写则返回1,否则返回0。测试元素是否在列表中并返回0或1

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

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 
+0

@Donkey香港感谢您重塑我的问题,并感谢JOGO FO提示 – richpiana

回答

3

我们可以尝试%in%

as.integer(names %in% T1_temp) 

或者match

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

感谢您的回答速度(约1分钟后,我的问题,这是惊人的)。这是完美的。这正是我想要避免很多循环。 – richpiana

+1

@ akrun当然,我只需要等10分钟:)享受 – richpiana

相关问题