R表子集的长度条件

时间:2017-09-05 19:16:04

标签: r loops if-statement dataframe

我在R中有一个data.table,其中ID是一列。有些ID长3位,有些长4位。我想创建一个新表,只有那些长度不是4位的列才能轻松检查。如何遍历列$ ID的行并测试长度?

       Index ID age education gender relationship
       3    6192  32        12      2            2
       4    6191  18        NA      1           NA
       6    8421  25        10      1            2
       7     999  18        NA      1           NA
       9    7612  35        12      2            1
       10   7611  43        14      1            1
       11   8422  51        11      2            2

2 个答案:

答案 0 :(得分:1)

library(data.table)
DT = data.table(x=rep(c("b","a","c"),each=3), y=c(1,3,6), v=1:9, ID=c(123,1234,123,123,123))
   x y v   ID
1: b 1 1  123
2: b 3 2 1234
3: b 6 3  123
4: a 1 4  123
5: a 3 5  123
6: a 6 6  123
7: c 1 7 1234
8: c 3 8  123
9: c 6 9  123
subset(DT, !nchar(DT$ID)==4 )
   x y v  ID
1: b 1 1 123
2: b 6 3 123
3: a 1 4 123
4: a 3 5 123
5: a 6 6 123
6: c 3 8 123
7: c 6 9 123
DT1 <- subset(DT, !nchar(DT$ID)==4 )

DT1
   x y v  ID
1: b 1 1 123
2: b 6 3 123
3: a 1 4 123
4: a 3 5 123
5: a 6 6 123
6: c 3 8 123
7: c 6 9 123

最后,如果您的ID数据类型不是字符,请执行此操作DT1 <- subset(DT, !nchar(as.character(DT$ID))==4 )

答案 1 :(得分:1)

如果ID为数字,则floor(log10(ID))即可。

floor(log10(c(1, 10, 11, 100, 101)))
# [1] 0 1 1 2 2

如果ID是一个字符向量,那么nchar会告诉你每个字符串的长度。

nchar(c("1", "10", "11", "100", "101"))
# [1] 1 2 2 3 3