r - 多个 if-else 条件的最简单方法是什么?
问题描述
我有一个类似这样的数据集:
df_1 <- tribble(
~A, ~B, ~C,
10, 10, NA,
NA, 34, 15,
40, 23, NA,
4, 12, 18,
)
现在,我只想比较每一行的 A、B、C,并添加一个新列来显示最小数量。让我们看看想要的数据是什么样子的:
df_2 <- tribble(
~A, ~B, ~C, ~Winner,
10, 10, NA, "Same",
NA, 34, 15, "C",
40, 23, NA, "B",
4, 12, 18, "A",
)
有四种输出:Same、A-Win、B-Win、C-Win。
您将如何编码以获得此结果?
提前致谢。
解决方案
这里有一些东西:
foo <- function(x) {
rmin <- which(x == min(x, na.rm = TRUE))
if (length(rmin) > 1) "same" else names(rmin)
}
apply(df_1, 1, foo)
[1] "same" "C" "B" "A"
您可以将其作为一列添加到您的 data.frame 中:
df_1$winner <- apply(df_1, 1, foo)
# A tibble: 4 x 4
A B C winner
<dbl> <dbl> <dbl> <chr>
1 10 10 NA same
2 NA 34 15 C
3 40 23 NA B
4 4 12 18 A
如果您有更多变量并且只想使用一些变量,则可以使用字符向量:
vars <- c("A", "B", "C")
apply(df_1[vars], 1, foo)
推荐阅读
- python - 如何对 vaex 中的列进行 json 规范化?
- spring - java.sql.SQLException:不正确的字符串值:'\xCFC\xFB\xC3\xD4U...'
- api - 蒸汽 API 2020
- php - 致命错误:未捕获 PrestaShopException PrestaShop 1.7
- php - Symfony 4 Doctrine 2 findby dosent apply Join 和 custom join 不起作用
- mysql - 如何找出某个字符串在我的数据库中编码的字符?
- python - Python - pytesseract 对于相似图像不一致
- c# - EF Core Linq 查询以从可能性列表中选择匹配的行
- python - 输入变量以从数组中返回字符串
- java - 如何创建一个包含 if 语句的循环