我在数据框中有一堆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,但我不知道如何使用这样的多个条件.谢谢.
您可以创建一个命名向量,并将其与"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)