R语言 查找每个组的列中具有单个值的行

wnavrhmk  于 9个月前  发布在  其他
关注(0)|答案(2)|浏览(87)

我当前的 Dataframe 看起来像这样:

a b 
1 -
1 -
1 R
2 -
3 R
3 R
4 -
5 -
5 -
5 -
6 R
6 -

字符串
我想创建一个新的列“c”,当(且仅当)列“a”中具有相同值的每组行不一致时,该列的值为1。否则,列“c”等于0。
所以我想创建的数据集看起来像这样:

a b c
1 - 1
1 - 1
1 R 1
2 - 0
3 R 0
3 R 0
4 - 0
5 - 0
5 - 0
5 - 0
6 R 1
6 - 1


我尝试创建一个for循环,但没有成功。

oxiaedzo

oxiaedzo1#

使用dplyr,您可以

library(dplyr)
dd %>% 
  mutate(c = as.numeric(n_distinct(b)!=1), .by=a)

字符串
哪里

dd <- data.frame(
  a = c(1, 1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 6),
  b = c("-", "-", "R", "-", "R", "R", "-", "-", "-", "-", "R", "-")
)


我们的想法是,我们计算每组“a”值的不同值的数量,如果它不正好是1,就标记它。

a b c
1  1 - 1
2  1 - 1
3  1 R 1
4  2 - 0
5  3 R 0
6  3 R 0
7  4 - 0
8  5 - 0
9  5 - 0
10 5 - 0
11 6 R 1
12 6 - 1

suzh9iv8

suzh9iv82#

我们可以使用ave

within(dd, c <- ave(b, a, FUN = \(x) +(length(unique(x)) > 1)))

#>    a b c
#> 1  1 - 1
#> 2  1 - 1
#> 3  1 R 1
#> 4  2 - 0
#> 5  3 R 0
#> 6  3 R 0
#> 7  4 - 0
#> 8  5 - 0
#> 9  5 - 0
#> 10 5 - 0
#> 11 6 R 1
#> 12 6 - 1

字符串

**数据:**摘自弗里克先生的回答:

dd <- data.frame(
  a = c(1, 1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 6),
  b = c("-", "-", "R", "-", "R", "R", "-", "-", "-", "-", "R", "-")
)


创建于2023-12-11使用reprex v2.0.2

相关问题