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

w51jfk4q  于 2023-01-15  发布在  其他
关注(0)|答案(2)|浏览(129)

我有一个非常令人困惑的问题,我想得到帮助。
我有以下数据表:
| 类型|价值|
| - ------|- ------|
| 猫|1个|
| 制动爪|无|
| 猫|1个|
| 猫|1个|
| 猫|1个|
| 制动爪|无|
列类型中只有两个唯一值。我想在搜索值0的地方变异一个新列,但随后打印cat,这是type列中唯一的另一个唯一值,而不是dog。因此,
| 类型|价值|突变的|
| - ------|- ------|- ------|
| 猫|1个|- -|
| 制动爪|无|猫|
| 猫|1个|- -|
| 猫|1个|- -|
| 猫|1个|- -|
| 制动爪|无|猫|
我不知道从哪里开始。我试过ifelse语句,但它们无法打印该行值的相反值。有帮助吗?
下面是我尝试过的一个函数:

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

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

efzxgjgh

efzxgjgh1#

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

gab6jxml2#

您可以使用以下代码:

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))

相关问题