我在data.frame中有一个列,其中包含重复的元素:
7 7 7 7 7 b b b c c c c c
我不知道哪些是重复的元素,因为data.frame是以前计算的结果。例如:重复元素在这种情况下可以是3(即7,b,c)或4在其他情况下或2等等,它们也可以是不同的(即4,a,f或10,s, 3)。我想用一系列颜色替换重复的元素。例如,在这种情况下:
blue blue blue blue blue yellow yellow yellow red red red red red
或者如果列表仅由两个重复的组组成,则组的元素将分别分配为蓝色和黄色。这可能吗? 我能够替换列表的元素,但是当我不知道data.frame中有多少组而不打印它并将其表格时,我就能够。
有人可以帮我吗?
提前谢谢
答案 0 :(得分:2)
我们可以使用因素:
数据强>
template is_member_of(alias M)
{
alias T = /**/;
}
static assert(is(is_member_of!(S.func) == S));
static assert(is(is_member_of!func == void));
static assert(is(is_member_of!(S.x) == S));
<强>溶液强>
df <- data.frame(col1=c('7','7','7','7','7','b','b','b','c','c','c','c','c'),stringsAsFactors = F)
repl<- c("blue","yellow","red","purple")
答案 1 :(得分:0)
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width,initial-scale=1.0"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<link rel="stylesheet" href="//code.jquery.com/mobile/1.5.0-alpha.1/jquery.mobile-1.5.0-alpha.1.min.css">
<script src="//code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="//code.jquery.com/mobile/1.5.0-alpha.1/jquery.mobile-1.5.0-alpha.1.min.js"></script>
</head>
<body>
<script>
$("#dsa").bind("tap",qq);
function qq(event){
$(event.target).css("background-color","#F0F");
}
</script>
<div data-role="page" data-title="Tableau測試" data-theme="b">
<div data-role="header">
<p>從下方選單選擇一個想看的東西</P>
</div>
<div data-role="content">
<ol data-role="listview">
<li><a href="20180615-0001.html" rel="external">20180615-0001</a></li>
<li><a href="test.html" rel="external">test</a></li>
<div><p id="dsa" style="background-color:#0F6">fnhdjiahgdifsaghui</p></div>
</ol>
</div>
<div data-role="footer" id="foo">
<p></P>
</div>
</div>
</body>
答案 2 :(得分:0)
我认为这可能有助于您的需求。
recode(x, "'7'='blue'; 'b'='yellow'; 'c'='red'")
答案 3 :(得分:0)
可以同时使用dplyr
包和data.table::rleid
函数来获得适用于dplyr-chain
的解决方案。
假设应包含最大可能颜色数的首选项颜色矢量为:
myColor = c("blue", "yellow", "red", "black", "pink")
否则,甚至可以使用colors(distinct = TRUE)
代替myColor
。
选项#1:解决方案可以实现为:
library(dplyr)
library(data.table)
df %>% mutate(Color = myColor[rleid(Col)])
#OR -- If someone doesnt want to use `data.table` then solution can be as
df %>% mutate(Color = myColor[cumsum(Col != lag(Col, default = ""))])
# Col Color
# 1 7 blue
# 2 7 blue
# 3 7 blue
# 4 7 blue
# 5 7 blue
# 6 b yellow
# 7 b yellow
# 8 b yellow
# 9 c red
# 10 c red
# 11 c red
# 12 c red
# 13 c red
选项#2:使用colors(distinct = TRUE)
df %>% mutate(Color = colors(distinct = TRUE)[cumsum(Col != lag(Col, default = ""))])
# Col Color
# 1 7 white
# 2 7 white
# 3 7 white
# 4 7 white
# 5 7 white
# 6 b aliceblue
# 7 b aliceblue
# 8 b aliceblue
# 9 c antiquewhite
# 10 c antiquewhite
# 11 c antiquewhite
# 12 c antiquewhite
# 13 c antiquewhite
数据:强>
df <- read.table(text =
"Col
7
7
7
7
7
b
b
b
c
c
c
c
c",
stringsAsFactors = FALSE, header = TRUE)