相关疑难解决方法(0)

使用dplyr删除重复的行

我有一个像这样的data.frame -

set.seed(123)
df = data.frame(x=sample(0:1,10,replace=T),y=sample(0:1,10,replace=T),z=1:10)
> df
   x y  z
1  0 1  1
2  1 0  2
3  0 1  3
4  1 1  4
5  1 0  5
6  0 1  6
7  1 0  7
8  1 0  8
9  1 0  9
10 0 1 10
Run Code Online (Sandbox Code Playgroud)

我想根据前两列删除重复的行.预期产量 -

df[!duplicated(df[,1:2]),]
  x y z
1 0 1 1
2 1 0 2
4 1 1 4
Run Code Online (Sandbox Code Playgroud)

我正在寻找使用dplyr包的解决方案.

r dplyr

113
推荐指数
4
解决办法
9万
查看次数

将相关性显示为有序列表,而不是大型矩阵

我有一个包含100多列的数据框.cor()返回非常快,但告诉我太多,特别是因为大多数列不相关.我想它只是告诉我列对及其相关性,理想情况下是有序的.

如果没有意义,这是一个人为的例子:

df = data.frame(a=1:10,b=20:11*20:11,c=runif(10),d=runif(10),e=runif(10)*1:10)
z = cor(df)
Run Code Online (Sandbox Code Playgroud)

z看起来像这样:

           a          b           c           d          e
a  1.0000000 -0.9966867 -0.38925240 -0.35142452  0.2594220
b -0.9966867  1.0000000  0.40266637  0.35896626 -0.2859906
c -0.3892524  0.4026664  1.00000000  0.03958307  0.1781210
d -0.3514245  0.3589663  0.03958307  1.00000000 -0.3901608
e  0.2594220 -0.2859906  0.17812098 -0.39016080  1.0000000
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是一个能告诉我的功能:

a:b -0.9966867 
b:c  0.4026664
d:e -0.39016080  
a:c -0.3892524 
b:d  0.3589663
a:d -0.3514245 
b:e -0.2859906
a:e  0.2594220 
c:e  0.17812098
c:d  0.03958307
Run Code Online (Sandbox Code Playgroud)

我有一个粗暴的方法来摆脱一些噪音:

z[abs(z)<0.5]=0
Run Code Online (Sandbox Code Playgroud)

然后扫描寻找非零值.但它远远低于上述所需的输出.

更新:根据收到的答案,以及一些试验和错误,这是我采用的解决方案:

z[lower.tri(z,diag=TRUE)]=NA  #Prepare to drop duplicates and meaningless information
z=as.data.frame(as.table(z))  #Turn into …
Run Code Online (Sandbox Code Playgroud)

r

31
推荐指数
2
解决办法
2万
查看次数

标签 统计

r ×2

dplyr ×1