我有一个简单的DF:
Dev_Func
agn
agn
ttt
ttt
agn
我想要做的就是该字段包含" agn"将其替换为" PE"
这是我写的代码:
test = subset(Final.ds,Device_Function == "AGN" | Device_Function ==
"TTT", select = c(Device_Function))
colnames(test) = c("Device_Function")
as.character(test)
test = within(test, Device_Function[Device_Function == 'AGN'] = 'PE')
但我只是继续发现这个错误:
Warning message:
In `[<-.factor`(`*tmp*`, Device_Function == "AGN", value = "PE") :
invalid factor level, NA generated
它所做的就是取代所有&#34; AGN&#34; NA的值。 请帮助!
答案 0 :(得分:3)
您可以使用gsub
执行此操作:
df$Dev_Func <- gsub("agn", "PE", df$Dev_Func)
df
# Dev_Func
#1 PE
#2 PE
#3 ttt
#4 ttt
#5 PE
保持Dev_Func
作为因素的替代解决方案(如akrun所述):
df$Dev_Func <- as.factor(gsub("agn", "PE", df$Dev_Func))
class(df$Dev_Func)
[1] "factor"
答案 1 :(得分:2)
由于该列是factor
,我们可以指定“{1}}”。到了&#39; PE&#39;
levels
并将其保留为levels(DF$Dev_Func)[levels(DF$Dev_Func)=='agn'] <- 'PE'
列
factor
注意:假设&#39; agn&#39;是固定匹配而不是子字符串
在OP代码中,即levels(DF$Dev_Func)
#[1] "PE" "ttt"
DF
# Dev_Func
#1 PE
#2 PE
#3 ttt
#4 ttt
#5 PE
功能,存在一些问题
1)作业是within
而不是<-
2)它无法进行逻辑子集分配
3)该列为=
,并且没有任何级别的&#39; PE&#39;它会生成有关factor
4)根据例子,&#39; agn&#39;是小写而不是AGN&#39; (可能是拼写错误),但invalid factor level, NA generated
区分大小写
假设我们将R
添加为PE
levels
然后下面的作业将起作用
DF$Dev_Func <- factor(DF$Dev_Func, levels = c(levels(DF$Dev_Func), 'PE'))
与基于 DF$Dev_Func[DF$Dev_Func=='agn'] <- 'PE'
作业
levels