2017-04-18 13 views
1

次のデータフレームがあるとします。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 

答えて

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 
+3

%data%>%arrange(col1、-as.numeric(col2))%>%distinct(col1、.keep_all = TRUE) ' – Frank

0

それともdata.tableを使用することができます。 (setDT(data)) 'data.table' から 'data.frame' を変換し、 'COL1' によってグループ化され、ifall値が 'COL2' は0であり、0

ない 'COL2' または else戻り値を返します
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 
関連する問題