小编xgr*_*rau的帖子

在密度分布上绘制中位数

我正在尝试使用ggplot2 R库在密度分布上绘制某些数据的中值。我想将中间值作为文本打印在密度图的顶部

您将看到一个示例的意思(使用“钻石”默认数据框):

每切钻石价格

我正在打印三个项目:密度图本身,一条垂直线,显示每个切割的中位数价格,以及带有该值的文本标签。但是,正如您所看到的,中位数价格在“ y”轴上重叠(这种美感在geom_text()函数中是必需的)。

有没有办法为每个中间价格动态分配一个“ y”值,以便在不同的高度打印它们?例如,每个“切口”的最大密度值。

到目前为止,我已经知道了

# input dataframe
dia <- diamonds

# calculate mean values of each numerical variable:
library(plyr)
dia_me <- ddply(dia, .(cut), numcolwise(median))

ggplot(dia, aes(x=price, y=..density.., color = cut, fill = cut), legend=TRUE) +
  labs(title="diamond price per cut") +
  geom_density(alpha = 0.2) +
  geom_vline(data=dia_me, aes(xintercept=price, colour=cut),
             linetype="dashed", size=0.5) +
  scale_x_log10() +
  geom_text(data = dia_me, aes(label = price, y=1, x=price))
Run Code Online (Sandbox Code Playgroud)

(我为geom_text函数中的y美感分配了一个常量值,因为它是强制性的)

r ggplot2 density-plot

4
推荐指数
1
解决办法
6286
查看次数

使用 awk 删除基于两个字段的文件中的冗余

我试图根据前两列的值删除一个非常大的文件(~100,000 条记录)中的重复行,而不考虑它们的顺序,然后打印这些字段+其他列。

所以,从这个输入:

A B XX XX
A C XX XX
B A XX XX
B D XX XX
B E XX XX
C A XX XX
Run Code Online (Sandbox Code Playgroud)

我想要:

A B XX XX
A C XX XX
B D XX XX
B E XX XX
Run Code Online (Sandbox Code Playgroud)

(也就是说,我想删除“BA”和“CA”,因为它们已经以相反的顺序出现;我不关心下一列中的内容,但我也想打印它)

我的印象是使用 awk + ​​数组应该很容易做到这一点,但我无法提出解决方案。

到目前为止,我正在修补这个:

awk '
NR == FNR {
h[$1] = $2   
next
}
$1 in h {
print h[$1],$2}' input.txt
Run Code Online (Sandbox Code Playgroud)

我将第二列存储在由第一个 (h) 索引的数组中,然后检查存储的数组中是否出现第一个字段。然后,打印该行。但是出了点问题,我没有输出。

我很抱歉,因为我的代码根本没有帮助,但我有点坚持这个。

你有什么想法?

非常感谢!

arrays bash awk

2
推荐指数
1
解决办法
525
查看次数

标签 统计

arrays ×1

awk ×1

bash ×1

density-plot ×1

ggplot2 ×1

r ×1