这根本不算优雅,但你可以这样做。问题是如果你有更多可能的情况,它会变得令人讨厌。
DB <- data.frame(col1=c(2,3,1,5,3), col2=c("M","B","m","K","k"))
DB$col3 <- NA
DB$col3 <- ifelse(DB$col2=="K" | DB$col2=="k", DB$col1 * (10^3), DB$col3)
DB$col3 <- ifelse(DB$col2=="M" | DB$col2=="m", DB$col1 * (10^6), DB$col3)
DB$col3 <- ifelse(DB$col2=="B", DB$col1 * (10^9), DB$col3)
DB$col3 <- ifelse(is.na(DB$col2)==TRUE, 0, DB$col3)
,或者您也可以做到这一点
DB <- data.frame(col1=c(2,3,1,5,3), col2=c("M","B","m","K","k"))
DB2 <- data.frame(col2=c("M","B","m","K","k"), tmp=c(10^6,10^9,10^6,10^3, 10^3))
DB<- merge(DB, DB2, by="col2")
DB$col3 <- DB$col1 * DB$tmp
DB$tmp <- NULL