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