我正在尝试根据同一数据帧的另一列“solve_status”列将值分配给Dataframe的新列。所有$ resolved_status都是一个有3个标签的因子-'ABC,XYZ,MNP'。我必须根据条件分配0或1 if(ABC)然后1 else 0。
我有以下数据
solved_status
1 ABC
2 XYZ
3 ABC
4 MNP
5 XYZ
6 MNP
我必须将其更改为
solved_status cls
1 ABC 1
2 XYZ 0
3 ABC 1
4 MNP 0
5 XYZ 0
6 MNP 0
pre$cls <- function(x){if(factor(pre$solved_status[x])=="ABC"){ pre$cls[x] = 1} else {pre[x,'cls'] =0}}
发生错误 -
Error in rep(value, length.out = nrows) : attempt to replicate an object of type 'closure'
然后我用Google搜索并将其更改为 -
> func <- function(x){if(as.character(pre[x,'solved_status'])=="ABC"){ pre[x,'cls'] = 1} else { pre[x,'cls'] =0} }
> pre$cls = lapply(pre$solved_status,func)
再次出错 -
Error in Summary.factor(2L, na.rm = FALSE) : 'max' not meaningful for factors
我不知道我哪里出错了。有人可以纠正吗?
答案 0 :(得分:2)
无需编写自定义函数。您可以使用buildin R功能。之一:
all$class <- ifelse(all$solved_status=="ABC", 1, 0)
或:
all$class <- c(0,1)[all$solved_status=="ABC" + 1L]
或:
all$class <- as.integer(all$solved_status=="ABC")
应该有用。
答案 1 :(得分:1)
以下是recode
library(car)
recode(df1$solved_status, "'ABC'=1;else=0")
#[1] 1 0 1 0 0 0
recode
的优势在于它可以用于factor
,character
列并将其更改为任何值。
假设我们有一个factor
向量
v1 <- factor(c("ABC", "ACD", "AFD", "ADR", "ABC", "ANC"))
并想要取代&#34; ABC&#34;与&#34; a&#34;以及所有其他人作为&#34; d&#34;
recode(v1, "'ABC'= 'a'; else = 'd'")
#[1] a d d d a d
#Levels: a d
输出为factor
,其等级自动更改为&#39; a&#39;&#39; d&#39;。