r - 在R中的每一列中查找大于数字的元素的更简单的函数
问题描述
我是 R 的初学者,我主要是自学。我找到了一些练习,并给出了一个数据框,并要求找到 3 个小于 8 的学生。
df <- data.frame(Name = c('Ana', 'John', 'Joanna', 'Anna', 'Martin', 'Katrin'),
Age = c(24, 26, 26, 31, 32, 45),
Height = c(1.7, 1.82, 1.75, 31, 32, 45),
Gender = c('M', 'M','F', 'F', 'M','F'),
stringsAsFactors = FALSE)
marks <- matrix(c(10, 9, 10, 6, 7, 8,
10, 9, 10, 8, 7, 8,
8, 10, 9, 7, 7, 7,
6, 8, 6, 8, 8, 9,
6, 8, 6, 10, 9, 10,
7, 6, 8, 10, 10, 8), nrow = nrow(df), ncol = 6)
rownames(marks) <- df$Name
colnames(marks) <- c('Math', 'Physics', 'Arts', 'Chemistry','Biology', 'History')
我做了一个非常简单的解决方案,一个一个地检查,它可以得到正确的答案,但如果我有一个巨大的数据集,绝对不会工作。有人可以帮我找出解决它的“正确”方法吗?
我的解决方案:
for (i in marks[1,])
print (i < 8)
for (i in marks[2,])
print (i < 8)
for (i in marks[3,])
print (i < 8)
for (i in marks[4,])
print (i < 8)
for (i in marks[5,])
print (i < 8)
for (i in marks[6,])
print (i < 8)
我认为应该有一种使用 for 或 apply 函数的方法,但我无法让它工作。我将不胜感激任何输入,非常感谢您!
解决方案
我们可以在矩阵或 data.frame 上使用比较运算符来创建逻辑矩阵
i1 <- marks < 8
-输出
i1
# Math Physics Arts Chemistry Biology History
#Ana FALSE FALSE FALSE TRUE TRUE TRUE
#John FALSE FALSE FALSE FALSE FALSE TRUE
#Joanna FALSE FALSE FALSE TRUE TRUE FALSE
#Anna TRUE FALSE TRUE FALSE FALSE FALSE
#Martin TRUE TRUE TRUE FALSE FALSE FALSE
#Katrin FALSE FALSE TRUE FALSE FALSE FALSE
从上面的输出中,如果我们需要每个学生的计数,请使用rowSums
rowSums(i1)
# Ana John Joanna Anna Martin Katrin
# 3 1 2 2 3 1
推荐阅读
- azure - 我们是否需要在 Azure 流量管理器上配置自定义 HOST 标头?
- javascript - 数据 URI 链接是永久的吗?
- bazel - 这个 Bazel 构建文件只有 deps 没有 srcs
- vue.js - 开玩笑让我失败了,但绝对不可能
- c - 在链表实现中调用 strcpy() 时如何解决分段错误?
- python - 如何连接 3 个大型推文数据帧 (csv) 文件,每个文件都有大约 500 万条推文?
- user-input - 从第三方网站获取用户数据
- windows - 如何跳过写字板中的内容块
- c# - org.openqa.selenium.WebDriverException:未知错误:找不到 Chrome 二进制文件
- python - 包含多个 python 文件的 Python 程序