dplyr突变与替换相结合:为什么替换不能识别这种情况?

dplyr突变与替换相结合:为什么替换不能识别这种情况?,r,replace,dplyr,R,Replace,Dplyr,我有这些称为msa的数据: BN MC 1 1A 2 2 3 1B 4 4 5 2 我想执行以下操作: lala<-msa%>% mutate(mc=replace(mc, (mc=="1A"|mc=="1B"),50))%>% mutate(df= NA)%>% mutate(df=replace(df, mc> 3, 1))%>% as.data.frame() 但是,如果用10、100或1000代替50,

我有这些称为msa的数据:

BN  MC
1   1A
2   2  
3   1B
4   4
5   2
我想执行以下操作:

  lala<-msa%>%
  mutate(mc=replace(mc, (mc=="1A"|mc=="1B"),50))%>%
  mutate(df= NA)%>%
  mutate(df=replace(df, mc> 3, 1))%>%
  as.data.frame()
但是,如果用10、100或1000代替50,则使用上述相同代码:

 lala<-msa%>%
  mutate(mc=replace(mc, (mc=="1A"|mc=="1B"),10))%>%
  mutate(df= NA)%>%
  mutate(df=replace(df, mc> 3, 1))%>%
  as.data.frame()
为什么“替换”似乎只读取第一个数字来决定是否替换


编辑 基于MKR应答的工作代码

lala<-msa%>%
  mutate(mc=replace(mc, (mc=="1A"|mc=="1B"),10))%>%

  lala[,]<-sapply(lala[,],as.numeric) #makes lala completely numeric

  lala<-mutate(lala,df= NA)%>%
  mutate(df=replace(df, mc> 3, 1))%>%
  as.data.frame()
lala%
突变(mc=替换(mc,(mc==“1A”| mc==“1B”),10))%>%
拉拉[,]3,1))%>%
as.data.frame()

我认为原因是
MC
列是
chr
类型。因此,在检查
MC>3
时,MC被强制为数字。(只有第1个字符是强制的
)。因此
100
将与
1
相同。
MC
上的任何值,如
50
80
将使
MC>3
变为
TRUE
,否则其
FALSE
。如果条件评估为
TRUE
DF
的值为
1
否则其
NA

msa%>%
  mutate(MC=replace(MC, (MC=="1A"|MC=="1B"),1000))%>%
  mutate(df= NA)%>%
  mutate(df=replace(df, MC> 3, 1))%>%
  as.data.frame()
下面的测试将有助于理解问题

> ch = "80"
> ch > 3
[1] TRUE
> ch = "100"
> ch > 3
[1] FALSE
通过将
MC
替换为
as.numeric(MC)
来修改该命令,它甚至可以工作100分钟

msa%>%
  mutate(MC=replace(MC, (MC=="1A"|MC=="1B"),1000))%>%
  mutate(df= NA)%>%
  mutate(df=replace(df, as.numeric(MC)> 3, 1))%>%
  as.data.frame()

#  BN   MC df
#1  1 1000  1
#2  2    2 NA
#3  3 1000  1
#4  4    4  1
#5  5    2 NA

我的猜测是,在运行
replace(…,50)
之后,在同一数据帧上运行
replace(…,10)
。因此,没有
1A
1B
…适用于me@Sotos不。即使我这样做,拉拉也会被覆盖,所以这不是问题。这解决了谜团。我已经编辑了我的问题(在结尾),以显示我最终是如何根据您的答案进行编码的。非常感谢。
> ch = "80"
> ch > 3
[1] TRUE
> ch = "100"
> ch > 3
[1] FALSE
msa%>%
  mutate(MC=replace(MC, (MC=="1A"|MC=="1B"),1000))%>%
  mutate(df= NA)%>%
  mutate(df=replace(df, as.numeric(MC)> 3, 1))%>%
  as.data.frame()

#  BN   MC df
#1  1 1000  1
#2  2    2 NA
#3  3 1000  1
#4  4    4  1
#5  5    2 NA