我有一个包含许多人的推文以及他们相应的MBTI个性的数据集。 我想向数据集添加一个逻辑变量,仅基于其MBTI代码中的第一个字母是否正确,即是否为外向者为TRUE,如果为内向者为FALSE。我该怎么办? 我尝试过这样的事情:
mbti:是数据集 type:集合中提供不同类型的变量
mbti <- mbti %>%
`if`(mbti$type == `startsWith`("E")){
`mutate`(extrovert = TRUE)
} `else`{
`mutate`(extrovert = FALSE)
}
我尝试了其他几种变体,包括在for
循环中进行的变体,因为我想遍历许多不同的人。
很抱歉,如果这是一个愚蠢的问题,或者构架不佳,我对R还是陌生的。
答案 0 :(得分:0)
我强烈建议您阅读An Introduction to dplyr-我认为这将有助于消除您的一些误解。或也许是R的一般介绍。许多(大多数!)R函数都是向量化的,因此您不需要循环。 startsWith
是矢量化的,因此我们可以一次在您所有的个人上运行它。并且它已经返回了TRUE
或FALSE
,因此我们可以将结果直接分配给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)