我想创建一个新列,其中列'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
提前致谢,
答案 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