【问题标题】:How could I compute how many >x and <y conditions in my data?如何计算数据中有多少 >x 和 <y 条件?
【发布时间】:2020-06-26 02:26:26
【问题描述】:

我想计算我的数据中有多少个 >x 条件。

这是一个简单的例子。

假设我有如下数据。

data <- read.csv("data.csv")
data
   X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
1  1  2  3  4  5  6  7  8   9  10   2   4   6   8  10

我想计算 >=8 有多少个值(>=8 是不同的问题),我该怎么办?

如果有人有任何想法,我将非常感激。

【问题讨论】:

  • 如果其中一个答案解决了您的问题,请accept it;这样做不仅为回答者提供了一些积分,而且还为有类似问题的读者提供了一些关闭。尽管您只能接受一个答案,但您可以选择对您认为有帮助的人进行投票。 (如果仍有问题,您可能需要编辑您的问题并提供更多详细信息。)
  • 感谢您通知我。我是这个网站的新手。

标签: r dataframe csv


【解决方案1】:
dat <- read.table(header=TRUE, text="
   X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
1  1  2  3  4  5  6  7  8   9  10   2   4   6   8  10")

a <- unlist(dat)
sum(a <= 3 | a >= 8)
# [1] 9

或单行(且无中间变量):

with(list(a = unlist(dat)), sum(a <= 3 | a >= 8))

另一种选择,谢谢@A5C1D2H2I1M1N2O1R2T1,

rowSums(dat <= 3 | dat >= 8)

【讨论】:

  • 目前还不清楚他们的实际数据是什么样的,以及他们最终的目标是什么,但您可以使用unlisting 而不是rowSums。例如,如果你有dat &lt;- data.frame(matrix(sample(10, 15*25, TRUE), nrow = 25, ncol = 15)),你可以只做rowSums(dat &lt;= 3 | dat &gt;= 8)
【解决方案2】:

您还可以使用which() 函数(以防您需要知道符合您条件的数字出现的列号)。

# from r2evans' answer:
dat <- read.table(header=TRUE, text="
   X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
1  1  2  3  4  5  6  7  8   9  10   2   4   6   8  10")

使用which() 查找列号

which(dat[1, ] <=3 | dat[1, ] >= 8)
# [1]  1  2  3  8  9 10 11 14 15

然后从dat 中对这些列进行子集化。您可以只对您感兴趣的一行进行子集化:

dat[1, which(dat[1, ] <=3 | dat[1, ] >= 8)]
#   X1 X2 X3 X8 X9 X10 X11 X14 X15
# 1  1  2  3  8  9  10   2   8  10

或所有行(但在您的情况下,这没有区别,因为只有一行):

dat[, which(dat[1, ] <=3 | dat[1, ] >= 8)]
#   X1 X2 X3 X8 X9 X10 X11 X14 X15
# 1  1  2  3  8  9  10   2   8  10

最后,你可以看到有多少值满足这些条件:

length(dat[1, which(dat[1, ] <=3 | dat[1, ] >= 8)])
# [1] 9

也许这有点远,但了解满足dat[1, ] 条件的特定列可能会有所帮助。

【讨论】:

  • 感谢您的关注和有用的评论!
猜你喜欢
  • 1970-01-01
  • 2018-12-05
  • 2022-06-22
  • 2021-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-25
相关资源
最近更新 更多