我有一個data.frame類似的:
mydf=data.frame(LETTERS=LETTERS, rev_letters=rev(letters), var1=c(rep('a',10),rep('b',10),rep('c',6)), value=1:26)
> head(mydf)
LETTERS rev_letters var1 value
1 A z a 1
2 B y a 2
3 C x a 3
4 D w a 4
5 E v a 5
6 F u a 6
我想選擇與存盤在串列中的列和值相對應的行索引,如下所示:
mylist=list(LETTERS=c('A','M','X'), var1='b')
> mylist
$LETTERS
[1] "A" "M" "X"
$var1
[1] "b"
我想做類似以下的事情,但同時針對所有列和值:
> which(mydf[,names(mylist)[1]] %in% mylist[[1]])
[1] 1 13 24
...甚至更好地作為 TRUE/FALSE 變數:
> mydf[,names(mylist)[1]] %in% mylist[[1]]
[1] TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[13] TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
[25] FALSE FALSE
這個想法是最終得到串列中所有列和值的所有索引的單個變數;在上面的示例中,結果將是:
> indexes
[1] 1 11 12 13 14 15 16 17 18 19 20 24
... 或 TRUE/FALSE 對應項:
> indexes
[1] TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE
[13] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE TRUE
[25] FALSE FALSE
謝謝!
uj5u.com熱心網友回復:
帶%in% sapply:
mydf=data.frame(LETTERS=LETTERS, rev_letters=rev(letters), var1=c(rep('a',10),rep('b',10),rep('c',6)), value=1:26)
mylist = list(LETTERS = c('A','M','X'), var1 = 'b')
rowSums(sapply(names(mylist), function(x) mydf[[x]] %in% mylist[[x]])) != 0
# [1] TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
#[11] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
#[21] FALSE FALSE FALSE TRUE FALSE FALSE
which(rowSums(sapply(names(mylist), function(x) mydf[[x]] %in% mylist[[x]])) != 0)
#[1] 1 11 12 13 14 15 16 17 18 19 20 24
uj5u.com熱心網友回復:
遍歷名稱并使用which:
sort(unique(unlist(sapply(names(mylist), function(i){
which(mydf[, i] %in% mylist[[ i ]])
}))))
# [1] 1 11 12 13 14 15 16 17 18 19 20 24
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/530878.html
標籤:r列表数据框
