我有一个数据集,里面有许多人的推文,以及他们相应的MBTI个性。我想向数据集中添加另一个变量,它是一个逻辑变量,仅基于他们的MBTI代码中的第一个字母是否为真,即如果他们是外向的人,则为TRUE,如果他们是内向的人,则为FALSE。我怎么能这样做呢?我尝试了这样的东西:
mbti :是数据集类型:集合中的一个变量,它提供不同的类型
mbti <- mbti %>%
`if`(mbti$type == `startsWith`("E")){
`mutate`(extrovert = TRUE)
} `else`{
`mutate`(extrovert = FALSE)
}我已经尝试了其他几种变体,包括在for循环中,因为我想迭代许多不同的个体。抱歉,如果这是一个愚蠢的问题,或者框架很差,我对R很陌生。
发布于 2020-11-07 02:47:52
我强烈建议阅读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()是我们可以使用的矢量化函数,例如,如果你想要结果是“外向的”,如果输入带有E的startw,否则是“内向的”(见下文)。但是我们在这里不需要它,因为您想要TRUE/FALSE,而startsWith返回TRUE/FALSE
## an ifelse() example
mbti <- mbti %>%
mutate(vertedness = ifelse(startsWith(type, "E"), "Extrovert", "Introvert))发布于 2020-11-07 02:58:50
你可以直接使用ifelse。假设您的新列是Etype,那么
mbti$Etype <- ifelse(substring(mbti$type, 1, 1) == "E", TRUE, FALSE)https://stackoverflow.com/questions/64720046
复制相似问题