如何按指定顺序Unlist R语言中生成的列表数据?
问题解决方法
问题根源在于which(..., arr.ind=TRUE)返回的矩阵默认按列优先拆分,unlist时会先输出所有row值,再输出所有col值。要实现每行的row和col依次输出,需要把每个矩阵按行优先展开后再合并。
代码实现
rowcolfn <- function (df, colname) { which(df==(colname), arr.ind=TRUE) } valuesvar<-c(4.9, 1.5, 0.2) iris<-iris[1:5,] # 对每个匹配结果按行展开为向量 datalist <- purrr::map(.x=valuesvar, .f=function(x) as.vector(t(rowcolfn(df=iris, colname=x)))) # 合并得到目标结果 final_result <- unlist(datalist) print(final_result)
结果验证
运行后final_result的输出为:2 1 4 3 1 4 2 4 3 4 4 4 5 4,与需求一致。
原理说明
t(rowcolfn(...))将原矩阵的行转为列,使原矩阵的每行(row,col)变为转置后的每列as.vector()按列拆分转置后的矩阵,等价于按原矩阵的行顺序提取(row1, col1, row2, col2...)unlist()将所有元素的向量合并为一个整体
内容的提问来源于stack exchange,提问作者Basil
相关产品推荐
相关产品推荐

