You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将命名向量列表转为tibble并保留元素名称作为列

将命名列表转换为带残基列的tibble

问题背景

你有一个包含命名数值向量的列表lof,每个向量的元素名称是氨基酸残基标识。使用as_tibble(lof)转换后,仅保留了数值列,丢失了残基名称信息,需要将残基名称作为单独的residue列保留在结果tibble中。

解决方案

方法1:直接添加残基列(适用于所有子向量元素顺序一致的情况)

由于你的列表中所有子向量的残基顺序完全一致,可直接提取第一个子向量的名称作为residue列,再调整列位置:

library(tidyverse)

# 定义原始列表
lof <- list(PP1 = c(A = -0.96, R = 0.8, N = 0.82, D = 1, C = -0.55, 
E = 0.94, Q = 0.78, G = -0.88, H = 0.67, I = -0.94, L = -0.9, 
K = 0.6, M = -0.82, F = -0.85, P = -0.81, S = 0.41, T = 0.4, 
W = 0.06, Y = 0.31, V = -1), PP2 = c(A = -0.76, R = 0.63, N = -0.57, 
D = -0.89, C = -0.47, E = -0.54, Q = -0.3, G = -1, H = -0.11, 
I = -0.05, L = 0.03, K = 0.1, M = 0.03, F = 0.48, P = -0.4, S = -0.82, 
T = -0.64, W = 1, Y = 0.42, V = -0.43), PP3 = c(A = 0.31, R = 0.99, 
N = 0.02, D = -1, C = 0.19, E = -0.99, Q = -0.38, G = 0.49, H = 0.37, 
I = -0.18, L = -0.24, K = 1, M = -0.08, F = -0.58, P = -0.07, 
S = 0.57, T = 0.37, W = -0.47, Y = -0.2, V = -0.14))

# 转换并添加residue列
result <- as_tibble(lof) %>% 
  mutate(residue = names(lof$PP1)) %>% 
  relocate(residue, .after = last_col())

# 查看结果
result

输出结果:

# A tibble: 20 × 4
     PP1   PP2   PP3 residue
   <dbl> <dbl> <dbl> <chr>  
 1 -0.96 -0.76  0.31 A      
 2  0.8   0.63  0.99 R      
 3  0.82 -0.57  0.02 N      
 4  1    -0.89 -1    D      
 5 -0.55 -0.47  0.19 C      
 6  0.94 -0.54 -0.99 E      
 7  0.78 -0.3  -0.38 Q      
 8 -0.88 -1     0.49 G      
 9  0.67 -0.11  0.37 H      
10 -0.94 -0.05 -0.18 I      
# ℹ 10 more rows

方法2:通用匹配法(适用于子向量元素顺序不一致的情况)

如果列表中各子向量的残基顺序可能不同,可先将每个子向量转换为长格式tibble,再通过残基名称匹配合并为宽格式:

result <- map_dfr(lof, ~tibble(value = .x, residue = names(.x)), .id = "group") %>% 
  pivot_wider(names_from = group, values_from = value) %>% 
  relocate(residue, .after = last_col())

result

这种方法会自动基于残基名称对齐数据,避免顺序不一致导致的错误匹配。


内容的提问来源于stack exchange,提问作者littleworth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 01:20:20