如何解决使用基于多个条件的值使用 dplyr 改变一个新列;尝试了 lapply 但仍然无法正常工作
我有一个包含多列的数据框,我想在其中创建一个包含基于列状态的值的新列。
我是 R 新手,但我认为有可能做到这一点。
我的数据帧的 str() 是:
我的列状态包含一个故障代码,其值为 240:12、05:03: 90:312 等。但有些代码不是故障代码,只是信息。所以我想创建一个新列,说明哪些代码是错误的,哪些不是。
我知道代码以:
“00”、“01”、“02”、“03”、“04”、“05”、“07”、“08”、“09”、“10”、“11”、“12”,"14","15","16","17","20","21","60","240","600"
不是故障,其他都是故障代码。
Status 中的值是字符。
我的解决方案是:
dataframe3 %>%
mutate(Status_fault = case_when(startsWith(Status,C("00","01","02","03","04","05","07","08","09","10","11","12","600"))
~ "No fault",T ~ "fault"))
但这会导致
错误:mutate() 输入问题 Status_problem。 x 对象不可解释为因子 i 输入 Status_problem 是 case_when(...)。
有人想解决这个问题吗?我到处搜索堆栈溢出,但我找了这么久,我感觉我不能再直接思考了......
该问题与另一个使用 lapply 的问题相关联。所以我做了一个新的解决方案:
dataframe3 %>%
mutate(Status_problem = case_when(lapply(c('00','01','02','03','04','05','07','08','09','10','11','12','14','15','16','17','20','21','60','240','600'),starts_with,X = Status)
~ "No fault",T ~ "fault"))
不幸的是,这导致:
错误:mutate() 输入问题 Status_problem。 xc("'c("00",'不是一个函数、字符或符号","' "11",'不是函数、字符或符号","' "600")' 不是函数、字符或符号") i Input Status_problem is case_when(...).
有人看到我做错了吗?
解决方法
试试这个:
noFaultCodes = c("00","01","02","03","04","05","07","08","09","10","11","12","14","15","16","17","20","21","60","240","600")
dataframe3 %>% mutate(Status_fault = ifelse(gsub(':.*','',Status) %in% noFaultCodes,"No fault","fault"))
gsub()
删除 :
列中 Status
之后的所有内容。 %in%
检查修剪后的字符串是否在我们创建的名为 noFaultCodes
的集合中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。