首页 > 解决方案 > 获取比较多列的单列值

问题描述

我刚刚开始了我的 R 之旅。我想测试多个列中相同条件的值,如果一行中的任何值是“hello”,则返回 5:

result = ifelse((myData[1] == "hello") | (myData[2] == "hello") | (myData[3] == "hello"), 5, 0)

这工作正常,但代码似乎是多余的。当我做:

resultSec = ifelse(myData[1:3] == "hello", 5, 0)

然后根据条件检查所有 3 列,但我得到的结果不是单列,而是 3 列。因此,我将不得不对所有列进行额外的比较,这使得代码行数比第一个冗余方法要多。
在这种情况下,如何以有效的方式获得一列值?

标签: r

解决方案


您可以使用该函数apply()按列或行迭代 data.frame 或矩阵。margin参数决定了你使用哪一个。

在这里我们要检查行,所以我们使用margin = 1

dat <- data.frame(col1 = c("happy", "sad", "mad"),
                  col2 = c("tired", "sleepy", "happy"),
                  col3 = c("relaxed", "focused", "fine"))

dat$res <- apply(X = dat, MARGIN = 1,
                FUN = function(x) ifelse("happy" %in% x, 5, 0))

dat

   col1   col2    col3 res
1 happy  tired relaxed   5
2   sad sleepy focused   0
3   mad  happy    fine   5

推荐阅读