如果列表中存在相同的值,请将其添加到新变量中

时间:2018-03-24 20:23:40

标签: r if-statement

我有一个像这样的列表

month     year  id
1.        2014. 20.
1.        2014. 305.
1.        2014. 305.

我想创建新变量并将其放入所有非唯一ids =如果是id重复,我想将整个行放入新变量。

month     year  id
1.        2014. 305.
1.        2014. 305.

我不知道从哪里开始,我认为我应该创建if语句,但我不知道该把它放在里面。

if(duplicated(my_data$id) = TRUE) {

}

2 个答案:

答案 0 :(得分:0)

如果我理解正确,您需要group_by id并保留id不止一次出现的所有行。如果是这样,dplyr的一种方法可能是:

library(dplyr)

df %>% 
  group_by(id) %>% 
  filter(n() > 1) %>% 
  ungroup()
# A tibble: 2 x 3
  month  year    id
  <dbl> <dbl> <dbl>
1    1. 2014.  305.
2    1. 2014.  305.

如果您的数据结构是一个列表,我认为我们可以使用以下内容将其设为数据框:

# note that you can omit the as.list call assuming your data is already a list
df <- bind_rows(as.list(df))

数据:

Lines <- "month     year  id
          1.        2014. 20.
          1.        2014. 305.
          1.        2014. 305."

df <- read.table(text = Lines, header = T, stringsAsFactors = F)

答案 1 :(得分:0)

如果数据位于base-R,则可以在data.frame中使用一个选项:

df$id[df$id %in% df$id[duplicated(df$id)],]

#month year  id
#2     1 2014 305
#3     1 2014 305

#Data

df <-  read.table(text = 
"month     year  id
1.        2014. 20.
1.        2014. 305.
1.        2014. 305.", header = TRUE)