r - 计算每个站点的因子的新水平 (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方法可以找到这个输出?
解决方案
你可以做:
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
,但两种颜色(橙色和红色)都已出现在前几行中。
推荐阅读
- javascript - 如何检查电子邮件是否不是 gmail 或 hotmail
- docker - 如何使用 selenium 网格和 docker 访问 localhost 应用程序
- rest - 属性值可以用作 REST url 中的标识符吗
- android - 混合内容:页面通过 HTTPS 加载,但请求的图像不安全
- angular - Angular + RxJS BehaviorSubject 订阅不起作用
- unity3d - 仅渲染框内的点云数据
- git - 如何解决阅读我的结束标签问题
- node.js - 我正在尝试安装 npm 包,但它不起作用。错误:EPERM:不允许操作,mkdir 'C:\Users\HAMZA~1'
- loops - 如何传递具有不同参数的场景大纲?
- android - BottomsheetDialog 未设置样式或本地化