如何用R原生函数将矩阵多列嵌套为数据框单列(含标签列)
解决方案
这里有两种用R原生函数实现的方法,都能把矩阵的前4列转为数据框中存储4维向量的单列,同时保留第5列作为标签:
方法1:使用apply() + I()
先构造题目中的矩阵:
a <- matrix(1:20, 4, 5)
然后通过逐行处理生成目标数据框:
# 提取前4列的每一行转为向量,用I()保留向量结构 result_df <- data.frame( Data = I(apply(a[, 1:4], 1, function(x) x)), Label = a[, 5] )
打印结果验证:
print(result_df)
输出如下:
Data Label 1 1, 5, 9, 13 17 2 2, 6, 10, 14 18 3 3, 7, 11, 15 19 4 4, 8, 12, 16 20
方法2:使用split() + I()
这种方法通过按行拆分矩阵的前4列来生成向量列表:
# 按行拆分前4列,得到每个元素为4维向量的列表 data_list <- split(a[, 1:4], row(a[, 1:4])) # 组合成数据框 result_df <- data.frame( Data = I(data_list), Label = a[, 5] )
关键说明
I()函数是核心:它会告诉数据框不要将向量拆分为多个列,而是保留其作为单个向量的结构,最终Data列是列表列,每个元素都是一个4维向量。- 若要访问某一行的4维向量,可以用
result_df$Data[[n]](n为行号),比如result_df$Data[[1]]会返回[1] 1 5 9 13。
内容的提问来源于stack exchange,提问作者flamenco
相关产品推荐
相关产品推荐

