首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法根据另一个变量的第一个字母创建一个逻辑变量?

有没有办法根据另一个变量的第一个字母创建一个逻辑变量?
EN

Stack Overflow用户
提问于 2020-11-07 02:42:14
回答 2查看 39关注 0票数 0

我有一个数据集,里面有许多人的推文,以及他们相应的MBTI个性。我想向数据集中添加另一个变量,它是一个逻辑变量,仅基于他们的MBTI代码中的第一个字母是否为真,即如果他们是外向的人,则为TRUE,如果他们是内向的人,则为FALSE。我怎么能这样做呢?我尝试了这样的东西:

mbti :是数据集类型:集合中的一个变量,它提供不同的类型

代码语言:javascript
复制
mbti <- mbti %>%
    `if`(mbti$type == `startsWith`("E")){
    `mutate`(extrovert = TRUE)
   } `else`{
   `mutate`(extrovert = FALSE)
}

我已经尝试了其他几种变体,包括在for循环中,因为我想迭代许多不同的个体。抱歉,如果这是一个愚蠢的问题,或者框架很差,我对R很陌生。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-07 02:47:52

我强烈建议阅读An Introduction to dplyr -我认为这将有助于澄清你的一些误解。或者可能是对R.的一般介绍。许多(大多数!)R函数是矢量化的,所以你不需要循环。startsWith是矢量化的,因此我们可以一次在所有人身上运行它。而且它已经返回了TRUEFALSE,所以我们可以直接将结果赋值给startsWith输出。

代码语言:javascript
复制
## startsWith example
startsWith(c("Echo", "Elephant", "Not an E"), "E")
[1]  TRUE  TRUE FALSE

## using it for your problem
mbti <- mbti %>%
  mutate(extrovert = startsWith(type, "E"))

然而,if(){}else{}是一个例外-它不是矢量化的,它用于控制运行哪些代码。ifelse()是我们可以使用的矢量化函数,例如,如果你想要结果是“外向的”,如果输入带有E的startw,否则是“内向的”(见下文)。但是我们在这里不需要它,因为您想要TRUE/FALSE,而startsWith返回TRUE/FALSE

代码语言:javascript
复制
## an ifelse() example
mbti <- mbti %>%
  mutate(vertedness = ifelse(startsWith(type, "E"), "Extrovert", "Introvert))
票数 0
EN

Stack Overflow用户

发布于 2020-11-07 02:58:50

你可以直接使用ifelse。假设您的新列是Etype,那么

代码语言:javascript
复制
mbti$Etype <- ifelse(substring(mbti$type, 1, 1) == "E", TRUE, FALSE)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64720046

复制
相关文章

相似问题

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