我目前在 R 中遇到编码问题。这是我在这里的第一篇文章,所以我希望我做的是正确的。
我正在用以下代码替换 R 中数据框中的列。 North、South 和 West 都可以替换,但 R 不允许我替换 East。它保持这些点的数字。发生了什么,我该如何调整我的代码来修复它? oj$region 是一个数值向量,范围从 2 到 137。
oj$region <- replace(oj$region, oj$region >= 2 & oj$region <= 53, "West")
oj$region <- replace(oj$region, oj$region >= 54 & oj$region <= 86, "North")
oj$region <- replace(oj$region, oj$region >= 88 & oj$region <= 111, "East")
oj$region <- replace(oj$region, oj$region >= 112 & oj$region <= 137, "South")
如您所见,我的代码在所有行之间都是相同的。我是 R 的新手,所以如果我遗漏了一个怪癖。
最佳答案
是因为在第一行之后,由于 coercion,region
变成了一个字符列强>。然后像 >
这样的比较与你预期的略有不同。这是一个示例:
"88" > "111"
#[1] TRUE
对比
88 > 111
#[1] FALSE
这里有一些替代方法。 请注意,获得的值可能略有不同。
#DATA
set.seed(42)
oj = data.frame(region = sample(2:137), stringsAsFactors = FALSE)
1
oj$region2 <- replace(oj$region, oj$region >= 2 & oj$region <= 53, "West")
oj$region2 <- replace(oj$region2, oj$region >= 54 & oj$region <= 86, "North")
oj$region2 <- replace(oj$region2, oj$region >= 88 & oj$region <= 111, "East")
oj$region2 <- replace(oj$region2, oj$region >= 112 & oj$region <= 137, "South")
2
3
oj$region4 = as.character(factor(cut(x = oj$region,
breaks = c(0, 53, 86, 111, 137)),
labels = c("West", "North", "East", "South")))
关于R 在替换数据框中的列时省略值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48408391/