Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
284 views
in Technique[技术] by (71.8m points)

r - How to remove rows that have only 1 combination for a given ID

I have a dataframe like this

ID <- c("A","A","A","B","B","C","C")
Measurement <- c ("Length","Breadth","Breadth","Breadth","Length","Length","Length")  
Value <- c(4.5,6.6,7.5,3.3,5.6,8.9,16.1)
df <- data.frame(ID,Measurement,Value)
df

  ID Measurement Value
1  A      Length   4.5
2  A     Breadth   6.6
3  A     Breadth   7.5
4  B     Breadth   3.3
5  B      Length   5.6
6  C      Length   8.9
7  C      Length  16.1

My desired output is

  ID Measurement Value
1  A      Length   4.5
2  A     Breadth   6.6
3  A     Breadth   7.5
4  B     Breadth   3.3
5  B      Length   5.6

I want to remove rows that have only 1 combination for a given ID.

I do something like this to remove rows in a dataframe that has only 1 column with 1 unique value.

df_count <- length(unique(df$Measurement))
    if(df_count < 2)
      next

I am trying to extend that to use in a data frame that has a combination of 2 columns and I am not able to use the same logic. Please help with some inputs on how to solve this

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

In dplyr, it would be

library(dplyr)

df %>% group_by(ID) %>% filter(n_distinct(Measurement) > 1)
##       ID Measurement Value
##   <fctr>      <fctr> <dbl>
## 1      A      Length   4.5
## 2      A     Breadth   6.6
## 3      A     Breadth   7.5
## 4      B     Breadth   3.3
## 5      B      Length   5.6

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

1.4m articles

1.4m replys

5 comments

56.9k users

...