自动化R

时间:2016-12-06 05:42:55

标签: r optimization

根据我的数据(见下文),我使用 几个 "长度" +"其中"陈述(见下文)以探索我的数据。

Q1。是否有一个高效的代码自动化而不是使用这么多行代码?

Q2。我可以总结所有"长度"的答案。 +"其中"表格中的陈述? (例如,对于第一个 "长度" +"其中"声明,其中答案为 9,一张桌子可以说"第一象限" ,旁边或下面 9 )?

这是我的数据"长度" +"其中"我创建的陈述

x <- c(2,1,5,4,5,8,6,6,4,1,2,2,2,5,9,5,4,3,2,3,1,3,1,7,3,2,2,9,7,7,9,8,8,6,4,6,7,2,1,4,3,9)
y <- c(1,2,2,8,7,4,6,7,5,5,2,9,3,9,1,5,7,1,8,6,8,4,9,2,7,5,7,6,3,8,3,3,7,8,3,4,4,4,3,6,5,4)

## HERE is my "length" + "which" statements:

length(x[which(x < 5 & y <5)]) ## 1st quadrant datapoints (Left Bottom)
length(x[which(x < 5 & y >5)]) ## 2rd quadrant   "
length(x[which(x > 5 & y >5)]) ## 3rd quadrant   "
length(x[which(x > 5 & y <5)]) ## 4rd quadrant datapoints (Right Bottom)

length(x[which(x < 5)]) ## 1st left half
length(x[which(x > 5)]) ## 2nd right half
length(x[which(y < 5)]) ## 1st Bottom half
length(x[which(y > 5)]) ## 2nd Top half

length(x[which(x==5)]) ## Balanced Scope
length(x[which(y==5)]) ## Balanced Technicality
length(x[which(x==5 & y==5)]) ## Equal Scope and Technicality

length(x[which(y==5)]) ## How many of Xs have a Y of 5
length(y[which(x==5)]) ## How many of Ys have a X of 5

2 个答案:

答案 0 :(得分:1)

如果你想用你自己的描述创建一个漂亮的表,那么最好的方法就是用“很多”行来做。

names=c("1st quadrant", "2rd quadrant", "3rd quadrant", "...")
numbers=c(length(x[x < 5 & y <5]), length(x[x < 5 & y >5]), length(x[x > 5 & y >5]), 12345)

new_table=data.frame(names,numbers)

答案 1 :(得分:1)

首先,我要注意length(x[which(logical_vector)])只是sum(logical_vector),如果此向量的长度不超过x的长度(在您的情况下,总是长度相同。)

但我会提出一个不同的方法,而不是总结逻辑向量。 x和y表示平面中点的坐标,因此将它们绑定到一个数据帧中是很自然的,如下所示:

d <- data.frame(x, y)

关于x和y的真正重要的是(x - 5)(y - 5)表达式的标志(我将进一步说明)。我们来计算它们。

library(dplyr)
d <- mutate(d, sx = sign(x - 5), sy = sign(y - 5))
head(d)

  x y sx sy
1 2 1 -1 -1
2 1 2 -1 -1
3 5 2  0 -1
4 4 8 -1  1
5 5 7  0  1
6 8 4  1 -1

所以,解释一下:有sx = -1sy = -1这意味着对于这一点x < 5y < 5,我们可以确定只知道sxsy的象限。< / p>

现在我们需要创建一种字典,它可以通过sxsy告诉我们象限是什么。这很简单:

library(tibble)
quadrant <- tribble(
    ~sx, ~sy, ~quadrant,
     -1,  -1,         1,
     -1,   1,         2,
      1,   1,         3,
      1,  -1,         4
)

然后我们可以简单地将d与其合并以获取quadrant变量(某些点会有NAs,但这不是问题):

d <- merge(d, quadrant, all.x = T)

最后,要通过象限来获取摘要

count(d, quadrant)

# A tibble: 5 × 2
  quadrant     n
     <dbl> <int>
1        1     9
2        2    10
3        3     6
4        4     9
5       NA     8