我在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
答案 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