【问题标题】:Create a new column that displays multi column matches in R在 R 中创建一个显示多列匹配的新列
【发布时间】:2017-08-20 12:52:59
【问题描述】:

我想创建一个新列,其中“a”列中与“b”列有一个匹配(值 == 1)的因子由 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

提前致谢,

【问题讨论】:

  • ave(df$b, df$a, FUN = max)

标签: r dplyr


【解决方案1】:

我们可以使用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

【讨论】:

    【解决方案2】:

    我们可以使用base Rsplit

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

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 1970-01-01
      • 2019-06-13
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      • 1970-01-01
      • 2020-11-21
      • 2021-07-06
      相关资源
      最近更新 更多