将列拆分为R中的字符和数字

0 r

我将数据框拆分为XY.X有一栏,Y有一个100.

x <- subset(tbl, , select = ordernum)
y <- subset(tbl, select = -c(ordernum, paid1num, 
          weight, returnnum, order_only, multi_dep, sequence_id))
Run Code Online (Sandbox Code Playgroud)

下一个I相关X每一列Y产生一个frame100 columnsa single row.

corr <- cor(x,y)
Run Code Online (Sandbox Code Playgroud)

接下来我换位,

corr.t <- t(corr)
Run Code Online (Sandbox Code Playgroud)

并且(截断的)结果如下所示:

                                   ordernum
HH_AFFORD_MOMS_BUY_GREEN      -0.0021281583
HH_AFFORD_SPORTS              -0.0047221159
HH_AFFORD_CLASSICAL_MUSIC     -0.0006594956
HH_AFFORD_HOME_DECOR           0.0052106766
Run Code Online (Sandbox Code Playgroud)

我想把这个叫做的单列ordernum分成2列.阿character与变量名字段,以及numeric与所述相关性.

我感谢任何指导.也许如果我使用lm,而不是cor

Aru*_*run 5

您存储的输出corr.t是a matrix,您提到的"变量名称"是矩阵的名称,可以使用rownames().

要获得所需的输出,您可以:

data.frame(id = rownames(corr.t), val = c(t(corr.t)))
Run Code Online (Sandbox Code Playgroud)

更通用的解决方案 - 当您的矩阵不仅仅是一列时适用 - 将是:

data.frame(ID = rownames(your-matrix), 
           as.data.frame(your-matrix, 
                         row.names = 1:nrow(your-matrix)))
Run Code Online (Sandbox Code Playgroud)

最后一行,row.names = 1:nrow(your-matrix)从输出中删除行名称; 它们不再需要它们,因为它们现在是数据框架的一部分.


对于它的价值,您实际上并不需要专门转置数据以获得所需的输出.以下是R中可用的一个数据集的示例,它演示了您要实现的目标:

(mycor <- cor(swiss[, 1], swiss[, 2:5]))
#      Agriculture Examination  Education  Catholic
# [1,]   0.3530792  -0.6458827 -0.6637889 0.4636847

# Now, make it into a data.frame
data.frame(id = colnames(mycor), val = as.vector(mycor))
#            id        val
# 1 Agriculture  0.3530792
# 2 Examination -0.6458827
# 3   Education -0.6637889
# 4    Catholic  0.4636847
Run Code Online (Sandbox Code Playgroud)