Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何筛选R中相似(不相同)行名称的值_R_Function_Filter_Subset_Logical Operators - Fatal编程技术网

如何筛选R中相似(不相同)行名称的值

如何筛选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

我对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个。

如果它们的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]