R在替换数据帧中的列时省略了值

时间:2018-01-23 18:20:38

标签: r dataframe

我目前在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的新手,所以如果可能有一个怪癖,我会失踪。

2 个答案:

答案 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

LMunyan's Approach

第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")))