在R中实现例程自动化
鉴于我的数据(见下文),我正在使用几个“length”+“which”语句(见下文)来探索我的数据 Q1.是否有一种有效的代码来自动化而不是使用这么多行代码 Q2.我可以将所有“长度”+“哪些”陈述的答案汇总到一个表格中吗?(例如,对于答案为9的第一个“长度”+“哪个”语句,表可以说“第一象限”,并且在9旁边或下面) 以下是我的数据和我创建的长度+which”语句:在R中实现例程自动化,r,optimization,R,Optimization,鉴于我的数据(见下文),我正在使用几个“length”+“which”语句(见下文)来探索我的数据 Q1.是否有一种有效的代码来自动化而不是使用这么多行代码 Q2.我可以将所有“长度”+“哪些”陈述的答案汇总到一个表格中吗?(例如,对于答案为9的第一个“长度”+“哪个”语句,表可以说“第一象限”,并且在9旁边或下面) 以下是我的数据和我创建的长度+which”语句: 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
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
x5&y5)]###右下半场
长度(x[其中(y<5)])35;#第一个下半部分
长度(x[哪个(y>5)])35;##第二上半部分
长度(x[其中(x==5)]###平衡范围
长度(x[其中(y==5)]###平衡的技术性
长度(x[其中(x==5&y==5)]###范围和技术性相等
长度(x[哪个(y==5)]##有多少个x的y为5
长度(y[哪个(x==5)]##有多少y的x为5
如果您只想用自己的描述创建一个漂亮的表,那么最好的方法就是简单地使用“多”行
names=c(“第一象限”、“第二象限”、“第三象限”、“第四象限”)
数字=c(长度(x[x<5&y 5]),长度(x[x>5&y>5]),12345)
新表=数据帧(名称、数字)
首先,我想指出,长度(x[哪个(逻辑向量)])
就是和(逻辑向量)
,如果这个向量的长度不超过x
的长度(在你的例子中,它们总是相同的长度)
但我将建议一种不同的方法,而不是总结逻辑向量。x和y表示平面中点的坐标,因此将它们绑定到一个数据帧是很自然的,如下所示:
d <- data.frame(x, y)
因此,为了解释:如果一个点,例如有sx=-1
和sy=-1
,这意味着对于这个点x<5
和y<5
,我们可以只知道sx
和sy
来确定象限
现在我们需要创建一个字典,它可以通过sx
和sy
告诉我们象限是什么。这很简单:
library(tibble)
quadrant <- tribble(
~sx, ~sy, ~quadrant,
-1, -1, 1,
-1, 1, 2,
1, 1, 3,
1, -1, 4
)
最后,我们用象限来得到总结
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
计数(d,象限)
#一个tibble:5×2
象限n
1 1 9
2 2 10
3 3 6
4 4 9
5 NA 8
查看?cut
和?table
…此处不需要任何which()
语句。作为“首次学习子集时,一个常见错误是使用x[which(y)]
而不是x[y]
”@RHertel,这取决于您希望如何处理NA值。如果使用的x[y]
和y
包含NA值,您将在该位置插入NA值。如果要避免这种情况,可以使用isTRUE
或which
。与定义相同子集的全长逻辑向量相比,我还使用来存储一个小子集并节省相当多的内存。
library(tibble)
quadrant <- tribble(
~sx, ~sy, ~quadrant,
-1, -1, 1,
-1, 1, 2,
1, 1, 3,
1, -1, 4
)
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