有没有一种方法可以根据另一个变量的首字母创建逻辑变量?

时间:2020-11-06 18:42:13

标签: r

我有一个包含许多人的推文以及他们相应的MBTI个性的数据集。 我想向数据集添加一个逻辑变量,仅基于其MBTI代码中的第一个字母是否正确,即是否为外向者为TRUE,如果为内向者为FALSE。我该怎么办? 我尝试过这样的事情:

mbti:是数据集 type:集合中提供不同类型的变量

mbti <- mbti %>%
    `if`(mbti$type == `startsWith`("E")){
    `mutate`(extrovert = TRUE)
   } `else`{
   `mutate`(extrovert = FALSE)
}

我尝试了其他几种变体,包括在for循环中进行的变体,因为我想遍历许多不同的人。 很抱歉,如果这是一个愚蠢的问题,或者构架不佳,我对R还是陌生的。

2 个答案:

答案 0 :(得分:0)

我强烈建议您阅读An Introduction to dplyr-我认为这将有助于消除您的一些误解。或也许是R的一般介绍。许多(大多数!)R函数都是向量化的,因此您不需要循环。 startsWith是矢量化的,因此我们可以一次在您所有的个人上运行它。并且它已经返回了TRUEFALSE,因此我们可以将结果直接分配给startsWith输出。

## 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()是向量化函数,我们可以使用,例如,如果您希望输入startw并带有E,则结果为“外向”,否则为“内向”(请参见下文)。但是我们在这里不需要它,因为您想要TRUE/FALSE并且startsWith返回TRUE/FALSE

## an ifelse() example
mbti <- mbti %>%
  mutate(vertedness = ifelse(startsWith(type, "E"), "Extrovert", "Introvert))

答案 1 :(得分:0)

您可以直接使用ifelse。假设您的新列是Etype,然后

mbti$Etype <- ifelse(substring(mbti$type, 1, 1) == "E", TRUE, FALSE)