R数据帧 - 抑制值

时间:2017-04-18 21:38:02

标签: r

假设我有以下数据框。

data<-data.frame(index=1:10,col1=c('a','a','a','b','b','b','c','c','c','d'),col2=c(0,4,0,'up',0,0,0,'down',0,0))

 index col1 col2 
   1    a    0
   2    a    4
   3    a    0
   4    b   up
   5    b    0
   6    b    0
   7    c    0
   8    c down
   9    c    0
   10   d    0

如何获得下一个子帧? 我必须首先保持不同于零的唯一值(“col1”),或者如果不存在值(“col2”),则保持零。

data.frame(col1=c('a','b','c'),col2=c(4,'up','down'))

col1 col2
 a    4
 b   up
 c down
 d    0

2 个答案:

答案 0 :(得分:3)

以下是使用dplyr的方法:

library(dplyr)
# Use stringsAsFactors=FALSE to change the class of col1 and col2
data %>%
  group_by(col1) %>% 
  filter(all(unique(col2) == "0") | (col2 != "0"))
Source: local data frame [4 x 3]
Groups: col1 [4]

  index  col1  col2
  <int> <chr> <chr>
1     2     a     4
2     4     b    up
3     8     c  down
4    10     d     0

答案 1 :(得分:0)

或者我们可以使用data.table。将'data.frame'转换为'data.table'(setDT(data)),按'col1'分组,if all'col2'中的值为0,返回'col2' '或else返回非0的值

library(data.table)
setDT(data)[, if(all(col2==0)) col2 else col2[col2!=0], col1]
#    col1   V1
#1:    a    4
#2:    b   up
#3:    c down
#4:    d    0