如何筛选R中相似(不相同)行名称的值
我对R环境有些陌生。 我有一组字符“test”。如果我想从样本数据(数字)中筛选出列的所有对应值,我可以通过匹配列名来实现。如何筛选R中相似(不相同)行名称的值,r,function,filter,subset,logical-operators,R,Function,Filter,Subset,Logical Operators,我对R环境有些陌生。 我有一组字符“test”。如果我想从样本数据(数字)中筛选出列的所有对应值,我可以通过匹配列名来实现。 e、 g >测试头(样本数据) aa-001 aa-099 cc zz 1 5 6 7 2 >诱惑 真假假假假真 >req.vec req.vec aa-zz 1 2 但是,有没有可能除了aa的值之外,我还可以过滤掉aa-001和aa-099的相应值?我无法匹配“aa”的所有变体,因为aa、bb zz等变量的数据有100个。如果它们的coln
e、 g
>测试头(样本数据)
aa-001 aa-099 cc zz
1 5 6 7 2
>诱惑
真假假假假真
>req.vec req.vec
aa-zz
1 2
但是,有没有可能除了aa的值之外,我还可以过滤掉aa-001和aa-099的相应值?我无法匹配“aa”的所有变体,因为aa、bb zz等变量的数据有100个。如果它们的colname始终是给定格式,您可以这样做
test <-c("aa", "bb", "zz")
cn <- c("aa", "aa-001", "aa-099", "cc", "zz")
sample.data <- c(1,5,6,7,2)
names(sample.data) <- cn
sample.data[substr(cn, 1, 2) %in% test]
## aa aa-001 aa-099 zz
## 1 5 6 2
test此示例使用grep
匹配以test
向量中的字符开头的任何列名
test <- c("aa", "bb", "zz")
sample.data <- data.frame(aa=1, "aa-001"=5, "aa-099"=6,cc=7,zz=2)
cols <- apply(sapply(test, function(x) grepl(paste0("^",x),names(sample.data))),1,any)
sample.data[, cols]
您希望如何更改示例数据的结果?你是说要保留以“aa”开头的每一列吗?嗨,是的,我想生成一组数据,其中包含具有相同初始名称的所有列的值。实际上,只有最后四个字符会因不同的列名而改变。例如,如果列名是aa-001 aa-005 bbb-001 bbb-090 acdb-001 acdb-007等,我对包含“aa”和“acdb”等的值感兴趣,谢谢!不过我需要修改一下。根据我的问题,只有最后4个字符在变化。因此,我没有使用sample.data[substr(cn,1,2)%in%test]而是使用sample.data[substr(cn,1,nchar(cn)-4],%in%test]这就是我所做的。刚刚看到你的回复后张贴我的语法。非常感谢您的回复:)
test <-c("aa", "bb", "zz")
cn <- c("aa", "aa-001", "aa-099", "cc", "zz")
sample.data <- c(1,5,6,7,2)
names(sample.data) <- cn
sample.data[substr(cn, 1, 2) %in% test]
## aa aa-001 aa-099 zz
## 1 5 6 2
test <- c("aa", "bb", "zz")
sample.data <- data.frame(aa=1, "aa-001"=5, "aa-099"=6,cc=7,zz=2)
cols <- apply(sapply(test, function(x) grepl(paste0("^",x),names(sample.data))),1,any)
sample.data[, cols]
sample.data <- data.frame("aa-001"=1, "aa-005"=5, "bbb-001"=6,
"bbb-090"=7,"acdb-001"=2, "acdb-007"=1)
test <- c("aa","acdb")
nn <- names(sample.data)
cols <- substr(nn,1,nchar(nn)-4) %in% test
sample.data[,cols]
sample.data <- data.frame("aa-001"=1, "aa-005"=5, "bbb-001"=6,
"bbb-090"=7,"acdb-001"=2, "acdb-007"=1, check.names = FALSE)
test <- c("aa","acdb")
cols <- substr(nn,1,nchar(nn)-4) %in% test
sample.data[,cols]