我如何在R中创建此计数列?

时间:2017-08-01 19:25:02

标签: r dataframe

我的数据框:

df1
   Col1 
    A
    B
    C
    B
    D
    E

我想添加第二列Col2,如果Col1中的相应值多次出现在Col1中,则每个值为1,否则为0。因此,它看起来像这样:

df2
   Col1 Col2
   A    0
   B    1
   C    0
   B    1
   D    0
   E    0

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用duplicated查看是否有任何值重复。请务必检查fromLast = TRUE,因为您要将1分配给两个出现

as.numeric(duplicated(df1$Col1) | duplicated(df1$Col1, fromLast = TRUE))
#[1] 0 1 0 1 0 0

或者使用ave计算出现次数,并在出现次数超过1时转换为布尔值。

as.numeric(ave(1:NROW(df1), df1$Col1, FUN = length) > 1) 
#FUN specifies function (length in this case)
#[1] 0 1 0 1 0 0

答案 1 :(得分:0)

有几种方法可以做到这一点,但我认为最容易理解的是,如果您创建包含频率数据的第二个表,然后将其连接回原始数据帧。

首先创建数据框...

df1 <-
  data.frame(Col1 = c("A", "B", "C", "B", "D", "E"),
             stringsAsFactors = FALSE)

然后制作频率表并根据要求将值更改为0和1 ......

library(tidyverse)
df_freq <-
  df1 %>% group_by(Col1) %>% summarise(Col2 = n()) %>% mutate(Col2 = ifelse(Col2 > 1, 1, 0))

然后将频率表加回原来......

df1 %>% left_join(df_freq)