我正在尝试基于另一列创建一个新列,用于case_when
根据每行的值给出不同的输出。
我从df <- data.frame(a=c("abc", "123", "abc", "123"))
b
并想像这样生成一个新列
#> a b
#> 1 abc letter
#> 2 123 number
#> 3 abc letter
#> 4 123 number
Run Code Online (Sandbox Code Playgroud)
我已经尝试过df %>% mutate(b = case_when(startsWith(a, "a") ~ "letter", startsWith(a, "1") ~ "number"))
,但它只给出了一个错误。有人可以告诉我如何根据 a 列中行的第一个字母获取 b 列的不同值吗?
根据?startsWith
\n\n\nx - 考虑 \xe2\x80\x9cstarts\xe2\x80\x9d 的字符串向量。
\n
所以,startsWith
期望上课character
,现在就是factor
上课。将其转换为character
类即可解决问题
library(dplyr)\ndf %>%\n mutate(b = case_when(startsWith(as.character(a), "a") ~ "letter",\n TRUE ~ "number"))\n# a b\n#1 abc letter\n#2 123 number\n#3 abc letter\n#4 123 number\n
Run Code Online (Sandbox Code Playgroud)\n\n的默认行为data.frame
是stringsAsFactors = TRUE
. 如果我们指定stringsAsFactors = FALSE
,\'a\' 列将是character
类
另一种选择是str_detect
通过检查字符串开头 ( ^
) 的字符是否为数字 ( [0-9]
)来创建逻辑表达式
library(stringr)\nlibrary(dplyr)\ndf %>% \n mutate(b = c("letter", "number")[1+str_detect(a, "^[0-9]")])\n# a b\n#1 abc letter\n#2 123 number\n#3 abc letter\n# 123 number\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
5225 次 |
最近记录: |