编辑提出一个更好的问题:
libary("ggplot2)
data("diamonds")
diamonds_small <- diamonds[1:5000, ]
cutnewfunc <- function(x){
ifelse(x == c("Ideal", "Premium", "Very Good", "Good", "Fair"), c("Above Average", "Above Average", "Very Good", "Below Average", "Below Average"), "Default")
}
cutvect = as.vector(diamonds_small$cut)
newdiamonds = cutnewfunc(cutvect)
newdiamonds
结果:[1]“高于平均水平”“高于平均水平”“默认”“默认”“默认”“默认”“默认”
[8]“很好”“默认”“默认”“默认”“默认”“默认” “默认”
[15] “默认” “默认” “默认” “默认” “低于平均水平” “默认” “默认”
如您所见,有很多“默认”值不应该发生,因为调用 cutvect 将导致:
[1] "Ideal" "Premium" "Good" "Premium" "Good" "Very Good" "Very Good" "Very Good" "Fair"
[10]“非常好”“好”“理想”“优质”“理想”“优质”“优质”“理想”“好”
[19]“好”“非常好”“好”“非常好”“非常好”好”“非常好”“非常好”“非常好”“高级”
我将如何比较每个值,而不是导致“默认”?
谢谢!
我需要比较数据框中的字符串值,相应地生成结果,并将其添加到数据框中的新列中。
我想我需要: 1. 取带有参数字符串的列并形成一个向量, 2. 比较字符串并形成一个新向量和结果, 3. 将结果向量作为新列添加到原始列中数据框。
比较字符串位对我不起作用。
问题说我需要使用 'ifelse' 函数,但比较字符串导致 'only 适用于逻辑或数值'错误。
任何人都可以帮忙吗?
谢谢!
你的问题在这里:
x == c("Ideal", "Premium", "Very Good", "Good", "Fair")
==
不像你想象的那样工作......我们可以尝试一些简单的案例来看看它的作用:
> x = "Premium"
> x == c("Ideal", "Premium", "Very Good", "Good", "Fair")
[1] FALSE TRUE FALSE FALSE FALSE
> x = c("Premium", "Fair")
> x == c("Ideal", "Premium", "Very Good", "Good", "Fair")
[1] FALSE FALSE FALSE FALSE FALSE
Warning message:
In x == c("Ideal", "Premium", "Very Good", "Good", "Fair") :
longer object length is not a multiple of shorter object length
## Notice this result is ALL FALSE!
> x = rep("Premium", 10)
> x == c("Ideal", "Premium", "Very Good", "Good", "Fair")
[1] FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE
当我们这样做时x == y
,如果x
和y
的长度相同,则比较将成对进行:x 的第一个元素与 y 的第一个元素相比,x 的第二个元素与 y 的第二个元素相比,依此类推。如果其中一个x
或y
比另一个长,较短的将重复直到长度相等,但比较总是成对的。
关于组合因子级别的更好方法的完整答案在这里:清理因子级别(折叠多个级别/标签)。最好的方法是不要使用ifelse
. 但是,如果您必须使用ifelse
,请这样做:
cutnewfunc <- function(x){
ifelse(x %in% c("Ideal", "Premium"), "Above Average",
ifelse(x %in% c("Very Good"), "Very Good"), "Default"))
}
我没有完全写出来,因为这听起来像是家庭作业。剩下的我让你填。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句