根据不同列中的多个值添加列

use*_*606 0 r

我在数据框中有一堆od列,其中两个是这样的

col1 | col2
-----| -------------
 2   | M
 3   | B
 1   | m
 5   | K
 3   | k
Run Code Online (Sandbox Code Playgroud)

我想要的是创建一个包含以下内容的新列:

如果col2中的值是k或K,
col1*10 ^ 3的值,如果col2中的值是M或m,则
col1*10 ^ 6,如果col2中的值是B,则col1*10 ^ 9,
如果是任何值,则返回0其他.

我知道如果有二元条件,如何做ifelse,但我不知道如何使用这样的多个条件.谢谢.

A5C*_*2T1 5

您可以创建一个命名向量,并将其与"col2"列匹配以创建乘数.除了M,m,K,k,B或b之外的所有值都会产生NA,因此如果您想要"0",则只需NA从新列中进行子集化,然后手动将其替换为0.

Mults <- c(M = 10^6, m = 10^6, K = 10^3, k = 10^3, B = 10^9, b = 10^9)
Mults[mydf$col2]
#     M     B     m     K     k  <NA> 
# 1e+06 1e+09 1e+06 1e+03 1e+03    NA 
mydf$col3 <- mydf$col1 * Mults[mydf$col2]
mydf$col3[is.na(mydf$col3)] <- 0
mydf
#   col1 col2  col3
# 1    2    M 2e+06
# 2    3    B 3e+09
# 3    1    m 1e+06
# 4    5    K 5e+03
# 5    3    k 3e+03
# 6    3    x 0e+00
Run Code Online (Sandbox Code Playgroud)

这是我使用的"mydf"(带有一个额外的行):

mydf <- structure(list(col1 = c(2, 3, 1, 5, 3, 3), col2 = c("M", "B", 
    "m", "K", "k", "x"), col3 = c(2e+06, 3e+09, 1e+06, 5000, 3000, 0)), 
    .Names = c("col1", "col2", "col3"), row.names = c(NA, 6L), 
    class = "data.frame")
Run Code Online (Sandbox Code Playgroud)