首页 > 解决方案 > 计算每个站点的因子的新水平 (R)

问题描述

我需要生成一个表格,计算每个站点的因子的新水平。我的代码是这样的

# Data creation
f = c("red", "green", "blue", "orange", "yellow")
f = factor(f)
d = data.frame(
  site = 1:10,
  color1= c(
    "red", "red", "green", "green",  "green", 
    "blue","green", "blue", "orange", "yellow"
  ),
  color2= c(
    "green", "green",  "green", "blue","green", 
    "blue", "orange", "yellow","red", "red"
  )
)
d$color1 = factor( d$color1 , levels = levels(f) )
d$color2 = factor( d$color2 , levels = levels(f) )
d

它向我展示了这张桌子

我的数据

我需要计算每个新站点中有多少新颜色。只计算第一次出现,不重复。产生了这样一张桌子。

寻找这个输出

在此图中计算每个站点不重复的颜色。 数数

有没有一种dplyr方法可以找到这个输出?

标签: rdplyrcountingfactorslevels

解决方案


你可以做:

library(tidyverse)
d %>%
  pivot_longer(cols = -site) %>%
  mutate(newColors = duplicated(value)) %>%
  group_by(site) %>%
  mutate(newColors = sum(!newColors)) %>%
  ungroup() %>%
  pivot_wider()

这使:

# A tibble: 10 x 4
    site newColors color1 color2
   <int>     <int> <fct>  <fct> 
 1     1         2 red    green 
 2     2         0 red    green 
 3     3         0 green  green 
 4     4         1 green  blue  
 5     5         0 green  green 
 6     6         0 blue   blue  
 7     7         1 green  orange
 8     8         1 blue   yellow
 9     9         0 orange red   
10    10         0 yellow red   

请注意,这与您有 a 的第 9 行不同1,但两种颜色(橙色和红色)都已出现在前几行中。


推荐阅读