r - 获取比较多列的单列值
问题描述
我刚刚开始了我的 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 列。因此,我将不得不对所有列进行额外的比较,这使得代码行数比第一个冗余方法要多。
在这种情况下,如何以有效的方式获得一列值?
解决方案
您可以使用该函数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
推荐阅读
- docker - Jenkins docker slave 配置错误:SSH 服务在 43 秒后没有启动
- r - 变量“中”的无效类型(列表)和值不是唯一标识的
- javascript - Reactjs 中获取错误处理的问题
- python - 有没有办法找到特定字符的跨度,然后是任意数量的特定字符?
- cron - crontab 不执行 .sh 文件
- r - 为按一个离散因子分组的 ecdf 图着色,以使用不同(连续)因子连续着色?
- swift - Swift中结构数组的总和值
- jquery - 如何使用 jQuery 一次只显示一个段落?
- css - 如何用css替换文本
- macos - 如何在 Mac 上删除对 Visual Studio 的钥匙串访问?