在R语言数据框中引用其他行数据:新增邻接坐标对应的探索状态列
嘿,我来帮你搞定这个需求!你想要给数据框新增一列,把adj_coords里每个索引对应的explore_ind状态(dark/light)拼接成字符串对吧?这里有两种实用的实现方法,不管你习惯用tidyverse还是基础R都能搞定:
先确认你的数据框(方便复现)
首先先把你提供的数据框构造代码放出来,确保大家都能拿到相同的初始数据:
df <- structure(list(indx = 1:5, adj_coords = list(2:4, c(1L, 3L, 5L), c(1L, 2L, 4L), c(1L, 3L, 5L), c(1L, 4L, 5L)), explore_ind = c("dark", "dark", "light", "dark", "light")), row.names = c(NA, 5L), class = "data.frame")
方法1:用tidyverse(dplyr + purrr)实现
如果你平时习惯用tidyverse工具链,这种方法可读性拉满:
library(dplyr) library(purrr) df <- df %>% mutate(adj_coords_explore_ind = map_chr(adj_coords, ~paste(explore_ind[.x], collapse = ", ")))
简单解释:
map_chr会遍历adj_coords里的每一个列表元素(比如第一行的2:4)- 对于每个元素,我们取出
explore_ind中对应位置的值 - 最后用
paste(..., collapse = ", ")把这些值拼接成逗号分隔的字符串
方法2:基础R原生实现
如果不想加载额外的包,用基础R的sapply也能轻松完成:
df$adj_coords_explore_ind <- sapply(df$adj_coords, function(x) paste(df$explore_ind[x], collapse = ", "))
简单解释:
sapply和上面的map_chr作用类似,遍历adj_coords的每个列表项- 匿名函数里提取对应位置的
explore_ind值,再拼接成目标字符串
验证结果
运行任意一种方法后,打印数据框就能看到你想要的效果:
print(df)
输出结果和你预期的完全一致:
indx adj_coords explore_ind adj_coords_explore_ind 1 1 2,3,4 dark dark, light, dark 2 2 1,3,5 dark dark, light, light 3 3 1,2,4 light dark, dark, dark 4 4 1,3,5 dark dark, light, light 5 5 1,4,5 light dark, dark, light
内容的提问来源于stack exchange,提问作者locket
相关产品推荐
相关产品推荐

