我的数据框:
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
谢谢!
答案 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)