您好,我有一个非常大的数据框,它是一部分:

enter image description here

v1 <- c('i1', 'i10', 'i11')
v2 <- c(0.11, 0.07, 0.114)
v3 <- c(0.07, 0.08, 0.03)
df <- data.frame(cbind(v1, v2, v3))

如何编写代码将每一行转换为一个组合向量x <- c()

也就是说,我的预期输出应该是,变量名必须来自第V1列:

i1 <- c(0.11014318, 0.07302843, 0.01360761, 0.10619829, 0.14513045)
i10 <- c(0.07360007, 0.08013833, 0.13104657, 0.13174247, 0.14256615)
i11 <- c(0.11418245, 0.03300573, 0.11425297, 0.13686428, 0.03367279)

在将每一行转换成一个向量之后,我需要计算这些向量之间的余弦相似性,这就是为什么我需要拆分每一行,并将它们保存为第一列V1中的向量.

library(lsa)
cosine(i1, i10)
cosine(i1, i11)
cosine(i10, i11)

The following question

你好SamR.感谢您的帮助,但我不知道为什么在添加更多列V4V5以及一行ID为i12时它不起作用?非常感谢你的耐心和帮助.

data_matrix <- function(df){
  data_matrix  <- tail(t(df), -1) |>
    sapply(as.numeric) |>
    matrix(
        nrow = ncol(df)-1, 
        ncol = nrow(df), 
        dimnames = list(
            seq_len(nrow(df)-1), # rows
            df[,1] # columns
        )
    ) 
}

v1 <- c('i1', 'i10', 'i11', 'i12')
v2 <- c(0.11, 0.07, 0.114, 0.67)
v3 <- c(0.07, 0.08, 0.03, 087)
v4 <- c(0.12, 0.13, 0.14, 0.18)
v5 <- c(0.19, 0.21, 0.22, 0.22)
df <- data.frame(cbind(v1, v2, v3, v4, v5))
df

data_matrix(df)

它只是返回错误:

Error in matrix(sapply(tail(t(df), -1), as.numeric), nrow = ncol(df) -  : 
  length of 'dimnames' [1] not equal to array extent

推荐答案

另一种方法是在每行上使用apply,这允许您直接设置环境:

apply(df, 1, function(x) assign(x[1], tail(x, -1), envir = globalenv()))

然而,我同意@danlooo的 comments :我想不出你想要这样做的任何理由.

编辑:如何计算余弦相似矩阵(以下是 comments )

如果你想计算一个余弦相似性矩阵,最好从一个矩阵开始,而不是把你的全局环境搞得一团糟,然后必须进行大量的成对计算.

首先将数据转换为正确的格式,即一个带有列名的数字矩阵,列名是数据框的第一列:

data_matrix  <- tail(t(df), -1) |>
    sapply(as.numeric) |>
    matrix(
        nrow = ncol(df) - 1, 
        ncol = nrow(df), 
        dimnames = list(
            seq_len(ncol(df)-1), # rows
            df[,1] # columns
        )
    ) 

data_matrix
#     i1  i10   i11
# 1 0.11 0.07 0.114
# 2 0.07 0.08 0.030

然后计算余弦相似性就很简单了:


library(lsa)
cosine(data_matrix)

#            i1       i10       i11
# i1  1.0000000 0.9595950 0.9525148
# i10 0.9595950 1.0000000 0.8283488
# i11 0.9525148 0.8283488 1.0000000

R相关问答推荐

ggplot geom_smooth()用于线性回归虚拟变量-没有回归线

如何 bootstrap glm回归、估计95%置信区间并绘制它?

derrr summarise每个组返回多行?

为什么观察不会被无功值变化触发?

如何在区分不同条件的同时可视化跨时间的连续变量?

在R中使用download. file().奇怪的URL?

R Select()可以测试不存在的子集列

用R ggplot2求上、下三角形中两个变量的矩阵热图

如何在ggplot2中绘制具有特定 colored颜色 的连续色轮

警告消息";没有非缺失的参数到min;,正在返回数据中的inf";.表分组集

观察器中的inaliateLater的位置

将具有坐标列表列的三角形转换为多个多边形

如何将这个小列表转换为数据帧?

删除在R中的write.table()函数期间创建的附加行

生存时间序列的逻辑检验

Data.table::Shift type=允许扩展数据(&Q;LAG&Q;)

如何创建直方图与对齐的每月箱?

只有当我在循环的末尾放置一条print语句时,Foreach才会给出预期的输出

如何阅读带有方括号的文件?

在R中的Sankey图表中添加标题