首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据数据集中已经存在的分类变量创建新变量

根据数据集中已经存在的分类变量创建新变量
EN

Stack Overflow用户
提问于 2017-01-16 21:40:20
回答 3查看 2K关注 0票数 5

假设我有一个具有分类变量X的数据集,该数据集的值为ABC

我想创建一个新的变量Y,即

  • 1,若X = A
  • 2,若X = B
  • 3,如果X = C

这是我到目前为止所得到的,我知道这是不正确的。

代码语言:javascript
复制
if(X==A) {
  (Y = 1)
  }
else if(X==B) {
  (Y = 2)
  }
else {
  (Y = 3)
  }

我不断地发现错误:

对象“Y”未找到

如何创建变量Y,以便它能够基于X的值来接受这些新值

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-16 22:16:36

对这个问题的投票结果让我很困惑.所以这个问题需要一个答案吗?

使用基于循环的方法,正如OP所希望的那样,是:

代码语言:javascript
复制
Y <- numeric(length(X))  ## initialize a numeric vector `Y`, of the same length of `X`
## loop through all elements of `X`, use `if-else` to allocate value for `Y`
for (i in seq_along(X)) {
  if (X[i] == "A") Y[i] <- 1
  else if (X[i] == "B") Y[i] <- 2
  else if (X[i] == "C") Y[i] <- 3
  }

完全矢量化的方法是

代码语言:javascript
复制
Y <- match(X, LETTERS[1:3])

在这里,LETTERS是大写字母的内部R常数。R中几乎没有常量,您可以通过阅读文档?Constants来获得它们。

票数 4
EN

Stack Overflow用户

发布于 2017-01-16 22:21:00

选项1:取因子的数值。

代码语言:javascript
复制
X
# [1] "B" "C" "A" "C" "A" "C" "B" "B" "A" "A"
c(factor(X))
# [1] 2 3 1 3 1 3 2 2 1 1

c()删除属性,并用于一般的幻想。as.numeric()可能更具可读性。

选项2:查找向量。

代码语言:javascript
复制
c(A = 1, B = 2, C = 3)[X]
# B C A C A C B B A A 
# 2 3 1 3 1 3 2 2 1 1

数据:

代码语言:javascript
复制
set.seed(25)
X <- sample(LETTERS[1:3], 10, TRUE)
票数 5
EN

Stack Overflow用户

发布于 2017-01-16 22:19:08

在本例中,您可能希望在dplyr::recode中考虑tidyverse。它本质上是一个矢量化的switch,这似乎是您想要的。或者,您可以使用第二个数据表并使用dplyr::left_joinbase::merge

代码语言:javascript
复制
library(tidyverse)

data = tribble(
    ~x, ~y,
    1, "A", 
    2, "A",
    4, "B",
    5, "C",
    7, "Z"
)

data %>% 
    mutate(
        new_var = recode(y, "A" = "first",
                            "B" = "second",
                            "C" = "third",
                            "Z" = "last")
    )
#> # A tibble: 5 X 3
#>       x     y new_var
#>   <dbl> <chr>   <chr>
#> 1     1     A   first
#> 2     2     A   first
#> 3     4     B  second
#> 4     5     C   third
#> 5     7     Z    last
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41685428

复制
相关文章

相似问题

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