r - 在 R 中检测具有多个观察值的行

标签 r

我有一个这样的数据集。我想识别在“颜色”列中具有多个值的所有观察结果,并将它们替换为“多色”

ID  color1   color2
23   red      NA
44   blue     purple
51   yellow   NA
59   green    orange

像这样:

ID  color   
23   red      
44   multicolor     
51   yellow     
59   multicolor   

任何想法将不胜感激,谢谢!

最佳答案

这是 tidyverse 中的一种方法。

library(dplyr)
library(tidyr)

df %>% 
  pivot_longer(cols = starts_with("color"), values_to = "color", values_drop_na  = TRUE) %>% 
  group_by(ID) %>% 
  summarize(n = n(),
            color = toString(color), .groups = "drop") %>% 
  mutate(color = if_else(n > 1, "multicolor", color)) %>% 
  select(-n)

# # A tibble: 4 x 2
#      ID color     
#   <int> <chr>     
# 1    23 red       
# 2    44 multicolor
# 3    51 yellow    
# 4    59 multicolor

我是故意这样做的。请注意,如果您在 summarize() 行之后停止,您将获得实际颜色。

# # A tibble: 4 x 3
#      ID     n color        
#   <int> <int> <chr>        
# 1    23     1 red          
# 2    44     2 blue, purple 
# 3    51     1 yellow       
# 4    59     2 green, orange

如果您有许多颜色列,而不仅仅是 2 个,这将扩展。玩弄它,有很多方法可以调整这样的东西。


数据

df <- read.table(textConnection("ID  color1   color2
23   red      NA
44   blue     purple
51   yellow   NA
59   green    orange"), header = TRUE)

关于r - 在 R 中检测具有多个观察值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70436734/

相关文章:

r - 如何使用ggplot2在条形图的条形上方添加边缘地毯

r - 如何将质量好的wordcloud放入pdf

从 R 中的列表中检索每个矩阵的信息

r - 如何在R中识别跨年的添加/删除

r - 在 Shiny 中将 map 上的状态转换为可点击的对象

r - 在 r 的 for() 循环中转置和重命名数据帧

r - 从矩阵中的每个点获取最大值

r - 使用 R 中的 split 函数拆分值列

r - 在 rmarkdown/knitr 中的 block 之前和之后插入 html 代码

r - ggarrange 绘制列表中的所有图