创建一个在R中显示多列匹配的新列

时间:2017-08-20 01:15:02

标签: r dplyr

我想创建一个新列,其中列'a'中具有一个匹配(值== 1)和列'b'的因子由TRUE指定。

a <- c(555, 555, 555, 666, 666, 666, 777, 777)
b <- c(1, 0, 0, 0, 0, 0, 1, 0)
df <- data.frame(a, b)

我想要的结果是

    a   b   c
1  555  1   1
2  555  0   1
3  555  0   1
4  666  0   0   
5  666  0   0
6  666  0   0
7  777  1   1
8  777  0   1

提前致谢,

2 个答案:

答案 0 :(得分:2)

我们可以使用dplyr包。

library(dplyr)
df2 <- df %>%
  group_by(a) %>%
  mutate(c = max(b))
df2
# A tibble: 8 x 3
# Groups:   a [3]
      a     b     c
  <dbl> <dbl> <dbl>
1   555     1     1
2   555     0     1
3   555     0     1
4   666     0     0
5   666     0     0
6   666     0     0
7   777     1     1
8   777     0     1

data.table包。

library(data.table)
dt <- as.data.table(df)
dt2 <- dt[, c := max(b), by = a]
dt2
     a b c
1: 555 1 1
2: 555 0 1
3: 555 0 1
4: 666 0 0
5: 666 0 0
6: 666 0 0
7: 777 1 1
8: 777 0 1

答案 1 :(得分:1)

我们可以使用base R split

df$c <- unsplit(lapply(split(df$b, df$a), max), df$a)
df$c
#[1] 1 1 1 0 0 0 1 1