我目前在R中遇到编码问题。这是我在这里发表的第一篇文章,所以我希望我能正确地做到这一点。
我使用以下代码替换R中数据框中的列。北方,南方和西方都取代罚款,但R不允许我替换东方。它保持这些点数字。发生了什么,我如何调整我的代码来修复它? 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的新手,所以如果可能有一个怪癖,我会失踪。
答案 0 :(得分:3)
这是因为在第一行之后,由于 coercion ,region
成为了一个字符列。然后像>
这样的比较与你期望的略有不同。这是一个例子:
"88" > "111"
#[1] TRUE
VS
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")))
答案 1 :(得分:1)
你也可以尝试这样的事情:
oj$region <- ifelse(oj$region >=2 & oj$region <= 53, "West",
ifelse(oj$region >=54 & oj$region <=86, "North",
ifelse(oj$region >= 88 & oj$region <=111, "East", "South")))