首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >替换数值显然是随机替换的

替换数值显然是随机替换的
EN

Stack Overflow用户
提问于 2015-05-18 21:21:45
回答 1查看 29关注 0票数 0

我试图用字符串替换数值,但是当我尝试下面的代码时,它用不正确的字符串替换了一些值。为什么会这样呢?

代码语言:javascript
复制
library(igraph)
g<-graph.data.frame(df, directed=F)

V(g)$color<-as.numeric(df[,3]) #assign the "attrib_of_df" attribute as the vertex color
V(g)$color[V(g)$color<50]<-"yellow"
V(g)$color[V(g)$color>50 & V(g)$color<100]<-"orange"
V(g)$color[V(g)$color>100]<-"red"

初始V(g)$color:

代码语言:javascript
复制
> V(g)$color
  [1] "2"   "17"  "48"  "16"  "36"  "124" "7"   "41"  "58"  "19"  "84"  "133" "44"  "68"  "60"  "25"  "36"  "31"  "28"  "60"  "16"  "1"   "24"  "0"   "23"  "26"  "23"  "26"  "11" 
 [30] "35"  "5"   "24"  "6"   "64"  "73"  "31"  "26"  "122" "41"  "64"  "4"   "72"  "0"   "5"   "21"  "52"  "0"   "10"  "59"  "13"  "68"  "0"   "68"  "35"  "1"   "0"   "101" "23" 
 [59] "71"  "46"  "22"  "40"  "77"  "32"  "41"  "26"  "75"  "24"  "90"  "42"  "10"  "100" "24"  "0"   "33"  "26"  "49"  "0"   "7"   "43"  "34"  "26"  "17"  "50"  "24"  "9"   "20" 
 [88] "37"  "19"  "1"   "27"  "84"  "41"  "34"  "0"   "10"  "29"  "43"  "25"  "15"  "29"  "0"   "4"   "59"  "2"   "17"  "48"  "16"  "36"  "124" "7"   "41"  "58"  "19"  "84"  "133"
[117] "44"  "68" 

运行第二行后(turn<50变为黄色):

代码语言:javascript
复制
> V(g)$color
  [1] "yellow" "yellow" "yellow" "yellow" "yellow" "yellow" "7"      "yellow" "58"     "yellow" "84"     "yellow" "yellow" "68"     "60"     "yellow" "yellow" "yellow" "yellow"
 [20] "60"     "yellow" "yellow" "yellow" "yellow" "yellow" "yellow" "yellow" "yellow" "yellow" "yellow" "yellow" "yellow" "6"      "64"     "73"     "yellow" "yellow" "yellow"
 [39] "yellow" "64"     "yellow" "72"     "yellow" "yellow" "yellow" "52"     "yellow" "yellow" "59"     "yellow" "68"     "yellow" "68"     "yellow" "yellow" "yellow" "yellow"
 [58] "yellow" "71"     "yellow" "yellow" "yellow" "77"     "yellow" "yellow" "yellow" "75"     "yellow" "90"     "yellow" "yellow" "yellow" "yellow" "yellow" "yellow" "yellow"
 [77] "yellow" "yellow" "7"      "yellow" "yellow" "yellow" "yellow" "50"     "yellow" "9"      "yellow" "yellow" "yellow" "yellow" "yellow" "84"     "yellow" "yellow" "yellow"
 [96] "yellow" "yellow" "yellow" "yellow" "yellow" "yellow" "yellow" "yellow" "59"     "yellow" "yellow" "yellow" "yellow" "yellow" "yellow" "7"      "yellow" "58"     "yellow"
[115] "84"     "yellow" "yellow" "68"  

我得到的值大于50,变成黄色,但其他值却没有变化,为什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-18 21:32:47

这是因为您的初始向量被存储为字符串而不是数字,所以您比较的是字符串排序而不是数字排序:

代码语言:javascript
复制
x <- c("2", "7", "60")
x[x<50]<-"yellow"
x
# [1] "yellow" "7"      "60"  

这可以用as.numeric来处理

代码语言:javascript
复制
x <- c("2", "7", "60")
x[as.numeric(x)<50]<-"yellow"
x[as.numeric(x)>=50 & as.numeric(x) < 100] <- "orange"
x[as.numeric(x) >= 100] <- "red"
x
# [1] "yellow" "yellow" "orange"

这会产生一些警告,因为在处理其他范围之前,您已经用颜色覆盖了字符串的一部分,所以最好一次使用嵌套的ifelse来处理这个问题。

代码语言:javascript
复制
x <- c("2", "7", "60")
x <- ifelse(as.numeric(x) < 50, "yellow", ifelse(as.numeric(x) >= 100, "red", "orange"))
x
# [1] "yellow" "yellow" "orange"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30313007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档