【发布时间】:2018-02-22 15:02:33
【问题描述】:
我有这些名为 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()
有效,
BN MC df
1 50 1
2 2 NA
3 50 1
4 4 1
5 2 NA
但是,如果我使用上面相同的代码替换为 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()
我明白了:
BN MC df
1 50 NA
2 2 NA
3 50 NA
4 4 1
5 2 NA
为什么“替换”似乎只读取第一个数字来决定是否替换?
编辑 基于 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()
【问题讨论】:
-
我的猜测是您在运行
replace(..., 50)之后在同一数据帧上运行replace(..., 10)。因此没有1A或1B... -
适合我
-
@Sotos 不。即使我这样做,lala 也会被覆盖,所以这不是问题。