我有这样的数据:

df <- data.frame(id = c("001", "002", "003", "004"),
                 banana = c("banana", NA, NA, NA),
                 apple = c(NA, "apple", "apple", NA),
                 orange = c("orange", NA, NA, NA),
                 mango = c(NA, NA, NA, "mango"))

 id banana apple orange mango
001 banana    NA orange    NA
002     NA apple     NA    NA
003     NA apple     NA    NA
004     NA    NA     NA mango

我想通过以下方式将变量合并到变量flavor中:

 id banana apple orange mango flavor
001 banana    NA orange    NA  mixed
002     NA apple     NA    NA  apple
003     NA apple     NA    NA  apple
004     NA    NA     NA mango  mango

我该怎么做?任何帮助是赞赏的,虽然一个概括dplyr解决方案将是伟大的.

编辑:我需要一个解决方案稳健的其他列在我的数据框中也.

推荐答案

如你所要求的,这是一个dplyr的解决方案.

library(dplyr)

df %>% 
  pivot_longer(-id) %>% 
  mutate(flavor = ifelse(sum(is.na(value)) == ncol(df) - 2, value[!is.na(value)], "mixed"), .by = id) %>% 
  pivot_wider() %>% 
  relocate(-flavor) # move the flavor column to the last

# A tibble: 4 × 6
  id    banana apple orange mango flavor
  <chr> <chr>  <chr> <chr>  <chr> <chr> 
1 001   banana NA    orange NA    mixed 
2 002   NA     apple NA     NA    apple 
3 003   NA     apple NA     NA    apple 
4 004   NA     NA    NA     mango mango

R相关问答推荐

给定R中另一行中的值,如何插补缺失值

卸载安装了BRM的模型发出的警告

更改Heatmap Annotation对象的名称

次级y轴R gggplot2

如何使用按钮切换轨迹?

用相同方法得到不同函数的ROC最优截断值

根据多个条件增加y轴高度以适应geom_text标签

如何在modelsummary中重命名统计数据?

标识R中多个列中缺少的唯一值

通过在colname中查找其相应值来创建列

线性模型斜率在减少原始数据时提供NA

从圆到R中的多边形的标绘雷达图

`夹心::vcovCL`不等于`AER::tobit`标准错误

派生程序包| ;无法检索';return()';的正文

R:如果为NA,则根据条件,使用列名模式将缺少的值替换为另一列中的值

为什么函数toTitleCase不能处理english(1),而toupper可以?

数值型数据与字符混合时如何进行绑定

如何使用循环从R中的聚合函数创建列,而不会在名称中给出&q;$&q;?

如何在一个GGPLATE中绘制多个灰度平滑?

使用循环改进功能( struct 简单)