R-如何在所有列中比较两个行(通过定义条件选择)



我有一个带有许多列和行的数据框架,例如

ID  Group A B   C   D   E   F   G   … 
1   1   0.1 0.0 0.5 0.0 0.9 0.0 0.0 …
2   1   0.1 0.0 0.0 0.7 0.0 0.0 0.3 …
3   2   0.0 0.1 0.6 0.0 0.0 0.2 0.0 …
1   1   0.0 0.0 0.0 0.0 0.0 0.0 0.0 …
3   1   0.0 0.5 0.0 0.0 0.0 0.6 0.0 …
1   2   0.2 0.1 0.2 0.0 0.0 0.0 0.1 …
2   2   0.1 0.1 0.1 0.1 0.1 0.1 0.1 …
1   2   0.0 0.2 0.8 0.0 0.0 1.3 1.1 …

我想在从a到末端的所有列中使用相同的ID进行比较。在比较的行中,如果第1组中至少有一个值不是零,并且第2组中至少有一个值不是零,则将此列名和值写入表中。因此,输出表看起来像这样:

ID  Group A B   C   D   E   F   G   … 
1   1   0.1 NA  0.5 NA  NA  NA  NA  … 
1   1   0.0 NA  0.0 NA  NA  NA  NA  … 
1   2   0.2 NA  0.2 NA  NA  NA  NA  … 
1   2   0.0 NA  0.8 NA  NA  NA  NA  … 
2   1   0.1 NA  NA  0.7 NA  NA  0.3 … 
2   2   0.1 NA  NA  0.1 NA  NA  0.1 … 
3   2   NA  0.1 NA  NA  NA  0.2 NA  … 
3   1   NA  0.5 NA  NA  NA  0.6 NA  … 

我是新手使用R,这对我来说似乎是一个巨大的挑战。感谢我的问题的任何帮助。非常感谢!

这是使用dplyr的一个选项,它使用了您的逻辑,但我希望它可以解决您的问题。对于给定的列,当组1或2中的所有值等于零时,我们替换给定ID的列值。

library(dplyr)
df %>% arrange(ID) %>%   # arrange ID in ascending order
       group_by(ID) %>%  # group by ID
       #mutate at all columns except ID and Group
       mutate_at(vars(-ID,-Group), ~replace(.,all(.[Group==1]==0)|all(.[Group==2]==0),NA)) 
# A tibble: 8 x 9
# Groups:   ID [3]
      ID Group    A     B     C     D     E     F     G
     <int> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
  1     1     1   0.1  NA     0.5  NA      NA  NA    NA  
  2     1     1   0    NA     0    NA      NA  NA    NA  
  3     1     2   0.2  NA     0.2  NA      NA  NA    NA  
  4     1     2   0    NA     0.8  NA      NA  NA    NA  
  5     2     1   0.1  NA    NA     0.7    NA  NA     0.3
  6     2     2   0.1  NA    NA     0.1    NA  NA     0.1
  7     3     2  NA     0.1  NA    NA      NA   0.2  NA  
  8     3     1  NA     0.5  NA    NA      NA   0.6  NA

数据

df <- read.table(text ="
ID  Group A B   C   D   E   F   G    
1   1   0.1 0.0 0.5 0.0 0.9 0.0 0.0 
                 2   1   0.1 0.0 0.0 0.7 0.0 0.0 0.3 
                 3   2   0.0 0.1 0.6 0.0 0.0 0.2 0.0 
                 1   1   0.0 0.0 0.0 0.0 0.0 0.0 0.0 
                 3   1   0.0 0.5 0.0 0.0 0.0 0.6 0.0 
                 1   2   0.2 0.1 0.2 0.0 0.0 0.0 0.1 
                 2   2   0.1 0.1 0.1 0.1 0.1 0.1 0.1 
                 1   2   0.0 0.2 0.8 0.0 0.0 1.3 1.1",
                           header = TRUE, stringsAsFactors = FALSE)

相关内容

  • 没有找到相关文章

最新更新