将R中的行转换为列以进行统计相关性分析
我正在尝试将R中的列转换为行,如果不使用重塑,则无法安装该包。我收到的数据包括属性及其相应的度量。我想计算所有这些属性之间的统计相关性——总共16000条,记录800万条。并非所有记录都具有相同数量的属性 为此,我相信我必须将列转换为行,以便最终使用cor函数,例如corx[,1],x[,2:16000]。如果有某种方法可以按属性使用cor函数,即属性1和2、属性1和3、属性1。。。任何帮助都将不胜感激将R中的行转换为列以进行统计相关性分析,r,rows,correlation,reshape,R,Rows,Correlation,Reshape,我正在尝试将R中的列转换为行,如果不使用重塑,则无法安装该包。我收到的数据包括属性及其相应的度量。我想计算所有这些属性之间的统计相关性——总共16000条,记录800万条。并非所有记录都具有相同数量的属性 为此,我相信我必须将列转换为行,以便最终使用cor函数,例如corx[,1],x[,2:16000]。如果有某种方法可以按属性使用cor函数,即属性1和2、属性1和3、属性1。。。任何帮助都将不胜感激 ID Attribute Metric1 [1,] 1
ID Attribute Metric1
[1,] 1 1 -1.6363007
[2,] 2 1 1.1483294
[3,] 3 1 2.1682566
[4,] 4 1 -1.1823649
[5,] 5 1 -1.3631378
[6,] 1 2 -1.1715544
[7,] 2 2 1.5164278
[8,] 3 2 -1.0110274
[9,] 4 2 -0.9421652
[10,] 5 2 -0.2105443
[11,] 6 2 -0.4143548
[12,] 7 2 -1.6170975
[13,] 8 2 1.2402303
[14,] 9 2 0.4460047
[15,] 7 3 0.1060407
[16,] 8 3 0.9796893
[17,] 9 3 0.9254911
[18,] 10 3 -1.5728600
[19,] 11 3 -0.8082675
[20,] 12 3 -1.8643084
转变:
ID attribute1 attribute2 attribute3
1 -1.6363007 -1.1715544 na
2 1.1483294 1.5164278 na
3 2.1682566 -1.0110274 na
4 -1.1823649 -0.9421652 na
5 -1.3631378 -0.2105443 na
6 na -0.4143548 na
7 na -1.6170975 0.1060407
8 na 1.2402303 0.9796893
9 na 0.4460047 0.9254911
10 na na -1.57286
11 na na -0.8082675
12 na na -1.8643084
test <- cbind(c(rep(1,5),rep(2,9),rep(3,6)), replicate(1,rnorm(20)))
test <- cbind(c(1:5,1:9,7:12),test)
@亚伦
q <- matrix(nrow=20,ncol=3)
colnames(q) <- c("x","y","z")
q[,3] <- replicate(1, rnorm(20))
q[,2] <- c(101,102,103,104,105,106, 107, 108, 101,103,107,109, 104,110,102,103,106,109,108,112)
q[15:20,1] <- 10000003
q[9:14,1] <- 10000002
q[1:8,1] <- 10000001
q <- data.frame(q)
q$x <- factor(q$x)
q$y <- factor(q$y)
q$z <- factor(q$z)
with(q, {
out <- matrix(nrow=nlevels(x), ncol=nlevels(y),
dimnames=list(levels(x), levels(y)))
out[cbind(x, y)] <- z
out
})
不需要重塑或重塑2包。只需使用基本R重塑。假设您的data.frame名为temp:
reshape(temp, direction = "wide", idvar="ID", timevar="Attribute")
# ID Metric1.1 Metric1.2 Metric1.3
# [1,] 1 -1.636301 -1.1715544 NA
# [2,] 2 1.148329 1.5164278 NA
# [3,] 3 2.168257 -1.0110274 NA
# [4,] 4 -1.182365 -0.9421652 NA
# [5,] 5 -1.363138 -0.2105443 NA
# [11,] 6 NA -0.4143548 NA
# [12,] 7 NA -1.6170975 0.1060407
# [13,] 8 NA 1.2402303 0.9796893
# [14,] 9 NA 0.4460047 0.9254911
# [18,] 10 NA NA -1.5728600
# [19,] 11 NA NA -0.8082675
# [20,] 12 NA NA -1.8643084
如果数据是矩阵而不是data.frame,则需要在使用“重塑”之前将其转换为data.frame,或者可以使用xtabs。但是,使用xtabs会创建零而不是NAs。以下是xtabs方法:
xtabs(Metric1 ~ ID + Attribute, tempm)
# Attribute
# ID 1 2 3
# 1 -1.6363007 -1.1715544 0.0000000
# 2 1.1483294 1.5164278 0.0000000
# 3 2.1682566 -1.0110274 0.0000000
# 4 -1.1823649 -0.9421652 0.0000000
# 5 -1.3631378 -0.2105443 0.0000000
# 6 0.0000000 -0.4143548 0.0000000
# 7 0.0000000 -1.6170975 0.1060407
# 8 0.0000000 1.2402303 0.9796893
# 9 0.0000000 0.4460047 0.9254911
# 10 0.0000000 0.0000000 -1.5728600
# 11 0.0000000 0.0000000 -0.8082675
# 12 0.0000000 0.0000000 -1.8643084
不需要重塑或重塑2包。只需使用基本R重塑。假设您的data.frame名为temp:
reshape(temp, direction = "wide", idvar="ID", timevar="Attribute")
# ID Metric1.1 Metric1.2 Metric1.3
# [1,] 1 -1.636301 -1.1715544 NA
# [2,] 2 1.148329 1.5164278 NA
# [3,] 3 2.168257 -1.0110274 NA
# [4,] 4 -1.182365 -0.9421652 NA
# [5,] 5 -1.363138 -0.2105443 NA
# [11,] 6 NA -0.4143548 NA
# [12,] 7 NA -1.6170975 0.1060407
# [13,] 8 NA 1.2402303 0.9796893
# [14,] 9 NA 0.4460047 0.9254911
# [18,] 10 NA NA -1.5728600
# [19,] 11 NA NA -0.8082675
# [20,] 12 NA NA -1.8643084
如果数据是矩阵而不是data.frame,则需要在使用“重塑”之前将其转换为data.frame,或者可以使用xtabs。但是,使用xtabs会创建零而不是NAs。以下是xtabs方法:
xtabs(Metric1 ~ ID + Attribute, tempm)
# Attribute
# ID 1 2 3
# 1 -1.6363007 -1.1715544 0.0000000
# 2 1.1483294 1.5164278 0.0000000
# 3 2.1682566 -1.0110274 0.0000000
# 4 -1.1823649 -0.9421652 0.0000000
# 5 -1.3631378 -0.2105443 0.0000000
# 6 0.0000000 -0.4143548 0.0000000
# 7 0.0000000 -1.6170975 0.1060407
# 8 0.0000000 1.2402303 0.9796893
# 9 0.0000000 0.4460047 0.9254911
# 10 0.0000000 0.0000000 -1.5728600
# 11 0.0000000 0.0000000 -0.8082675
# 12 0.0000000 0.0000000 -1.8643084
使用重塑2
使用重塑2
您能提供一个使用dput的起始数据的可复制示例吗?此外,如果生成的数据帧中有NAs,您将无法使用cor。有很多方法可以做到这一点,即使没有方便的重塑包;这个答案在一个地方收集了很多数据:@Aaron根据你的矩阵索引示例,有没有办法包含z的值而不是索引?只是不要将z作为一个因子。如果你想要数字的,就让它这样吧。如果您想将其作为一个字符,请使用as.character。您能提供一个使用dput的起始数据的可复制示例吗?此外,如果生成的数据帧中有NAs,您将无法使用cor。即使没有方便的重塑包,也有很多方法可以做到这一点;这个答案在一个地方收集了很多数据:@Aaron根据你的矩阵索引示例,有没有办法包含z的值而不是索引?只是不要将z作为一个因子。如果你想要数字的,就让它这样吧。如果希望它是一个字符,请使用as.character。当我尝试实现这一行时,系统会提示我错误消息:error in matchrval[,idvar],thistime[,idvar]:subscript out of of ofbounds@user1636475,您的输入是data.frame还是矩阵?在使用提供的示例代码之前,请尝试将其转换为data.frame。我认为这是问题所在,但肯定是一个矩阵。temp@user1636475,正如我提到的,重塑需要data.frame,所以请尝试重塑data.frameYOURMATRIXNAME等。@user1636475,您可能还需要开始接受某些问题的答案。我注意到您已经问了四个关于堆栈溢出的问题,但没有将其中的任何答案标记为已接受。请在答案旁边查找复选标记。当然,只有当答案符合您的期望时,才可以这样做。当我尝试实现这一行时,系统会提示我错误消息:error in matchrval[,idvar],thist[,idvar]:subscript out Of Ofbounds@user1636475,您的输入是data.frame还是矩阵?在使用提供的示例代码之前,请尝试将其转换为data.frame。我认为这是问题所在,但肯定是一个矩阵。temp@user1636475,正如我提到的,重塑需要data.frame,所以请尝试重塑data.frameYOURMATRIXNAME等。@user1636475,您可能还需要开始接受某些问题的答案。我注意到您已经问了四个关于堆栈溢出的问题,但没有将其中的任何答案标记为已接受。请在答案旁边查找复选标记。当然,只有在答案满足您的期望时才这样做@AnandaMahto我假设问题中没有不存在的东西:我假设如果他们不能安装整形软件包,他们也不能安装整形软件包@AnandaMahto我假设问题中不存在任何东西: