使用循环检查多列中是否存在某些值

时间:2014-11-06 21:51:54

标签: r

我的数据集包含多个列,其中有6个名为ID1,ID2,ID3,ID13,ID23,ID33,包含多个ID。我的目标是检查哪些行包含某些值(在这种情况下,值为531或532或533或534),并将这些值子集化为新数据集。

此代码为所有行的数据设置子集,其中任何一列中的ID正好是531,但是我不知道如何制作它所以它只检查STARTING为531的值,以及如何制作它检查所有4个起始值:531,532,533和534(不使用更多条件语句)

ID <- data[which(data$ID1 == '531' | data$ID2 == '531' | data$ID3 == '531' | data$ID13 == '531' | data$ID23 == '531' | data$ID33 == '531'), ]

我基本上是在寻找一种更简单的方法。

以下是示例数据和我想要的输出:

Sample Data                 
ID1     ID2     ID3     ID13    ID23    ID33
43645   38894   37338   45617   54419   42716
53123   24277   5323    29160       
22821   26091   46100   65324   22179   12367
        47946           59421   
                1954            9544
63534           53244           4771
59080   32532   41460   34562           15722
30542   11477   13211   11739           26753
29331           5311    7079    534424  5322

Desired Output                  
ID1     ID2     ID3     ID13    ID23    ID33
53123   24277   5323    29160       
63534           53244           4771
29331           5311    7079    534424  5322

我为格式化而道歉(确实缺少一些数据点)

由于

1 个答案:

答案 0 :(得分:2)

虽然你的问题有点不清楚(我不确定你想在这之后对这些行做什么...你可以使用{{1}选择所有id列都有TRUE的行或者至少有一个使用all):

any

如果你想保留至少有一个require(data.table) set.seed(123) dt = data.table(id1 = sample(525:535), id2=sample(525:535), id3=sample(525:535)) dt2=dt[,lapply(.SD, FUN = function(z) {z >= 531})] # id1 id2 id3 # 1: FALSE FALSE TRUE # 2: TRUE TRUE TRUE # 3: TRUE FALSE FALSE # 4: TRUE FALSE TRUE # 5: TRUE TRUE FALSE # 6: FALSE FALSE TRUE # 7: FALSE TRUE FALSE # 8: TRUE TRUE FALSE # 9: FALSE FALSE FALSE #10: FALSE FALSE FALSE #11: FALSE TRUE TRUE 的行(从您的代码段开始就是TRUE),那么你可以这样做。

|