gpt4 book ai didi

r - 根据 R 中列表中的存在向数据框添加列

转载 作者:行者123 更新时间:2023-12-05 01:22:33 25 4
gpt4 key购买 nike

我有一个数据框,例如

GroupsA GroupsB 
G1 G2
G1 G3
G1 G4
G1 G5
G1 G6
G2 G3
G2 G4
G2 G5
G2 G6
G3 G4
G3 G5
G3 G6
G4 G5
G4 G6
G5 G6

我有 3 个列表,例如:

list1<-c("G1","G3")
list2<-c("G2")
list3<-c("G4","G5","G6")

我想通过添加 GroupA 和 B 来自的列表的名称来向数据框添加一个新列,例如

GroupsA GroupsB Lists
G1 G2 list1&list2
G1 G3 list1&list1
G1 G4 list1&list3
G1 G5 list1&list3
G1 G6 list1&list3
G2 G3 list2&list1
G2 G4 list2&list3
G2 G5 list2&list3
G2 G6 list2&list3
G3 G4 list1&list3
G3 G5 list1&list3
G3 G6 list1&list3
G4 G5 list3&list3
G4 G6 list3&list3
G5 G6 list3&list3

如果有帮助的话,这里是 df 的 dput 格式:

structure(list(GroupsA = c("G1", "G1", "G1", "G1", "G1", "G2", 
"G2", "G2", "G2", "G3", "G3", "G3", "G4", "G4", "G5"), GroupsB = c("G2",
"G3", "G4", "G5", "G6", "G3", "G4", "G5", "G6", "G4", "G5", "G6",
"G5", "G6", "G6")), class = "data.frame", row.names = c(NA, -15L
))

最佳答案

基本的 R 解决方案可以是从您的全局环境中获取列表,将它们堆叠在数据框中并与您的原始数据框匹配,即

d1 <- stack(mget(grep('list', ls(), value = TRUE)))
df$Lists <- do.call(paste,
c(data.frame(sapply(df, function(i)d1$ind[match(i, d1$values)])),
sep = '&'))


GroupsA GroupsB Lists
1 G1 G2 list1&list2
2 G1 G3 list1&list1
3 G1 G4 list1&list3
4 G1 G5 list1&list3
5 G1 G6 list1&list3
6 G2 G3 list2&list1
7 G2 G4 list2&list3
8 G2 G5 list2&list3
9 G2 G6 list2&list3
10 G3 G4 list1&list3
11 G3 G5 list1&list3
12 G3 G6 list1&list3
13 G4 G5 list3&list3
14 G4 G6 list3&list3
15 G5 G6 list3&list3

数据

df <- structure(list(GroupsA = c("G1", "G1", "G1", "G1", "G1", "G2", 
"G2", "G2", "G2", "G3", "G3", "G3", "G4", "G4", "G5"), GroupsB = c("G2",
"G3", "G4", "G5", "G6", "G3", "G4", "G5", "G6", "G4", "G5", "G6",
"G5", "G6", "G6")), class = "data.frame", row.names = c(NA, -15L
))

关于r - 根据 R 中列表中的存在向数据框添加列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73745936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com