R 中是否有一个函数可以让我连续打印唯一的其他唯一元素?

Is there a function in R where I can print the only other unique element in a row?

我有一个非常令人困惑的问题,我想寻求帮助。

我有以下数据table:

type value
cat 1
dog 0
cat 1
cat 1
cat 1
dog 0

列类型中只有两个唯一值。我想改变一个新列,我在其中搜索值 0,然后打印 cat,这是 type 列中唯一的其他唯一值,而不是 dog。因此,

type value mutated
cat 1 _
dog 0 cat
cat 1 _
cat 1 _
cat 1 _
dog 0 cat

我不知道从哪里开始。我试过 ifelse 语句,但它们无法打印该行中值的相反值。有帮助吗?

这是我试过的功能

data %>% mutate(mutated = ifelse(value == 0, !(type), type))

然而,这只是给我一个错误。

您可以使用以下代码:

library(tidyverse)
df %>%
  mutate(mutated = ifelse(value == 0, "cat", "-"))

输出:

# A tibble: 6 × 3
  type  value mutated
  <chr> <dbl> <chr>  
1 cat       1 -      
2 dog       0 cat    
3 cat       1 -      
4 cat       1 -      
5 cat       1 -      
6 dog       0 cat 

您的数据

dput(df)
structure(list(type = c("cat", "dog", "cat", "cat", "cat", "dog"
), value = c(1, 0, 1, 1, 1, 0)), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -6L))

您可以使用 setdiff,这将计算所有 type 的向量(长度为 2,只有“cat”和“dog”)与 type 对于给定的行。根据您的需要,还有其他方法可以解决此问题。

library(tidyverse)

df %>%
  rowwise() %>%
  mutate(mutated = ifelse(value == 0, setdiff(unique(df$type), type), "-"))

输出

  type  value mutated
  <chr> <dbl> <chr>  
1 cat       1 -      
2 dog       0 cat    
3 cat       1 -      
4 cat       1 -      
5 cat       1 -      
6 dog       0 cat