如何将命名向量列表转为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
相关产品推荐
相关产品推荐

