提取特定值(n 位长,以数字开头)
Extract specific values (n digit long and starting with a number)
我有这样的 csv 文件:
X a b c d e f
1 1 663583 364950 651551 691428 111738 14522
2 2 373345 273164 79 65979 753131 446762
3 3 481865 920656 510754 67696 987635 964008
4 4 132506 824874 917557 506235 235523 500492
5 5 59034 772322 195845 130662 828260 262721
6 6 129712 294165 867589 199928 434893 444084
我需要一个以 7 开头且长度为 6 的值列表
对于我期望的示例:
[753131,772322]
我看到一些 grepl()
函数的使用,但无法弄清楚如何提取值并将它们转换为列表。
使用regex
d[sapply(d, function(x) grepl("^7", x) & nchar(x) == 6)]
#[1] 772322 753131
或数学
d[trunc(d/10^5) == 7]
#[1] 772322 753131
数据
d = read.table(strip.white = TRUE, stringsAsFactors = FALSE, header = TRUE,
text =
" X a b c d e f
1 1 663583 364950 651551 691428 111738 14522
2 2 373345 273164 79 65979 753131 446762
3 3 481865 920656 510754 67696 987635 964008
4 4 132506 824874 917557 506235 235523 500492
5 5 59034 772322 195845 130662 828260 262721
6 6 129712 294165 867589 199928 434893 444084")
一个选项也是 unlist
并使用 grep
通过匹配字符串开头 (^
) 的数字 7,后跟另外 5 个数字 (\d{5}
) 在字符串的末尾 ($
) 之前
unname(grep("^7\d{5}$", unlist(df1), value = TRUE))
#[1] "772322" "753131"
如果我们想按行获取值,则转置数据集,连接到向量并使用 grep
unname(grep("^7\d{5}$", c(t(df1)), value = TRUE))
#[1] "753131" "772322"
数据
df1 <- structure(list(X = 1:6, a = c(663583L, 373345L, 481865L, 132506L,
59034L, 129712L), b = c(364950L, 273164L, 920656L, 824874L, 772322L,
294165L), c = c(651551L, 79L, 510754L, 917557L, 195845L, 867589L
), d = c(691428L, 65979L, 67696L, 506235L, 130662L, 199928L),
e = c(111738L, 753131L, 987635L, 235523L, 828260L, 434893L
), f = c(14522L, 446762L, 964008L, 500492L, 262721L, 444084L
)), class = "data.frame", row.names = c("1", "2", "3", "4",
"5", "6"))
d<-as.list(d[d >=700000 & d< 799999])
我有这样的 csv 文件:
X a b c d e f
1 1 663583 364950 651551 691428 111738 14522
2 2 373345 273164 79 65979 753131 446762
3 3 481865 920656 510754 67696 987635 964008
4 4 132506 824874 917557 506235 235523 500492
5 5 59034 772322 195845 130662 828260 262721
6 6 129712 294165 867589 199928 434893 444084
我需要一个以 7 开头且长度为 6 的值列表
对于我期望的示例:
[753131,772322]
我看到一些 grepl()
函数的使用,但无法弄清楚如何提取值并将它们转换为列表。
使用regex
d[sapply(d, function(x) grepl("^7", x) & nchar(x) == 6)]
#[1] 772322 753131
或数学
d[trunc(d/10^5) == 7]
#[1] 772322 753131
数据
d = read.table(strip.white = TRUE, stringsAsFactors = FALSE, header = TRUE,
text =
" X a b c d e f
1 1 663583 364950 651551 691428 111738 14522
2 2 373345 273164 79 65979 753131 446762
3 3 481865 920656 510754 67696 987635 964008
4 4 132506 824874 917557 506235 235523 500492
5 5 59034 772322 195845 130662 828260 262721
6 6 129712 294165 867589 199928 434893 444084")
一个选项也是 unlist
并使用 grep
通过匹配字符串开头 (^
) 的数字 7,后跟另外 5 个数字 (\d{5}
) 在字符串的末尾 ($
) 之前
unname(grep("^7\d{5}$", unlist(df1), value = TRUE))
#[1] "772322" "753131"
如果我们想按行获取值,则转置数据集,连接到向量并使用 grep
unname(grep("^7\d{5}$", c(t(df1)), value = TRUE))
#[1] "753131" "772322"
数据
df1 <- structure(list(X = 1:6, a = c(663583L, 373345L, 481865L, 132506L,
59034L, 129712L), b = c(364950L, 273164L, 920656L, 824874L, 772322L,
294165L), c = c(651551L, 79L, 510754L, 917557L, 195845L, 867589L
), d = c(691428L, 65979L, 67696L, 506235L, 130662L, 199928L),
e = c(111738L, 753131L, 987635L, 235523L, 828260L, 434893L
), f = c(14522L, 446762L, 964008L, 500492L, 262721L, 444084L
)), class = "data.frame", row.names = c("1", "2", "3", "4",
"5", "6"))
d<-as.list(d[d >=700000 & d< 799999])