2017-02-16 75 views
1

我有“宽幅”的数据是这样开始的:行加法运算错误

id var_1 var_2 var_3... 
1 NaN 0  1 
2 2  NaN 3 
3 1  4  NaN 
. 
. 
. 

整个数据集是成千上万的意见和数百个变量的。我正在尝试过滤在var_1到var_12中的任意值都为1的观察值。

我尝试

library(package = dplyr) 

data <- data %>% 
    mutate(my_obs = select(var_1:var_12) %>% 
      apply(MARGIN = 1, 
       FUN = function(x) any(x == 1, 
             na.rm = TRUE)) == TRUE) %>% 
    filter(my_obs == 1) 

生成以下错误:

Error in mutate_impl(.data, dots): 

no applicable method for "select_" applied to an object of class 
c("double", "numeric") 
+0

你想要在所有变量中包含值1的行或在12个变量中有1行和的行吗? – shayaa

+1

@shayaa在任何变量中包含1的值的行 – zhaoy

+0

想想你可能想'apply(data [,1:12],1,function(x)any(x == 1))' – shayaa

回答

2

我们可以使用rowSumsmutate电话

data %>% 
    mutate(special_sum = rowSums(.[grep("var_\\d+", names(.))], na.rm = TRUE)) %>% 
    filter(special_sum >=1) 

内如果我们不希望创建special_sum,那么这可以在内完成210太

data %>% 
    filter(rowSums(.[grep("var_\\d+", names(.))], na.rm = TRUE)>=1)