15

データフレーム内の3つの変数が互いに等しい場合の条件を含む if else ステートメントを実行しようとしています。

同じ関数を使用したいと思っていましたが、これが 3 つの変数に対して機能するかどうかはわかりません。

私も次のものを使用しましたが、Rはこれが好きではないようです:

geno$VarMatch  <- ifelse((geno[c(1)] != '' & geno[c(2)] != '' & geno[c(3)] != '') 
& (geno[c(5)] == geno[c(4)] == geno[c(6)]), 'Not Important', 'Important')

私に言い続けます:

Error: unexpected '==' 

何かを data.frame/vector などとして指定することになっていますか... SPSSの観点からすると、少し混乱しています。

単純な質問で申し訳ありません。

4

7 に答える 7

6

これは、任意の数の入力に一般化して実行する再帰関数identicalです。FALSE入力のセットのいずれかのメンバーが他のメンバーと同一でない場合に返されます。

ident <- function(...){
    args <- c(...) 
    if( length( args ) > 2L ){
       #  recursively call ident()
       out <- c( identical( args[1] , args[2] ) , ident(args[-1]))
    }else{
        out <- identical( args[1] , args[2] )
    }    
    return( all( out ) )
}

ident(1,1,1,1,1)
#[1] TRUE
ident(1,1,1,1,2)
#[1] FALSE
于 2013-11-13T23:42:21.647 に答える
0

以下を使用する必要があります。

geno$VarMatch  <- ifelse((gene[c(1)] != '' & gene[c(2)] != '' & 
                          gene[c(3)] != '') & 
                          ((gene[c(5)] == gene[c(4)]) & 
                          (gene[c(4)] == gene[c(6)]))), 
                          'Not Important', 'Important')
于 2013-11-13T23:33:46.737 に答える
0

3 つの要素を比較し、それらを使用mutateして各組み合わせに適用する単純な汎用関数を考え出すことができると思います。rowwisedplyr

library("tidyverse")
set.seed(123)
dta_sample <- tibble(
    colA = sample(letters, 10000, TRUE),
    colB = sample(letters, 10000, TRUE),
    colC = sample(letters, 10000, TRUE)
)

compare_strs <- function(one, two, three) {
    if (one == two) {
        if (two == three) {
            return(TRUE)
        } else {
            return(FALSE)
        }
    } else {
        return(FALSE)
    }
}

dta_sample %>%
    rowwise() %>%
    mutate(all_cols_identical = compare_strs(colA, colB, colC)) %>%
    # For results
    filter(all_cols_identical)

プレビュー

# A tibble: 25 x 4
# Rowwise: 
   colA  colB  colC  all_cols_identical
   <chr> <chr> <chr> <lgl>             
 1 w     w     w     TRUE              
 2 k     k     k     TRUE              
 3 m     m     m     TRUE              
 4 b     b     b     TRUE              
 5 y     y     y     TRUE              
 6 n     n     n     TRUE              
 7 e     e     e     TRUE              
 8 j     j     j     TRUE              
 9 q     q     q     TRUE              
10 a     a     a     TRUE              
# … with 15 more rows
于 2020-11-18T12:19:40.447 に答える