如果两个列表的索引匹配,如何 return 列表的名称? (右)
How to return the names of a list if the index from two list matches? (R)
我有一个数据框列 (df$source_index
),其中包含 100 个 obs,索引属于 1-17,另一个列表 (list_df
) 的名称和相同索引属于 1-17。我如何在此数据框中创建(变异)一列,只要来自 df 列的索引(df$source_index
)和列表的索引(list_df
)匹配(是相同的值) , 它 returns 列表的名称?
df
dput(df)
structure(list(value = c(A,B,C,D,E,F,....N), source_index = c(1,1,1,2,2,3..17)), .Names = c("value ",
"source_index"), row.names = c(NA, 17L), class = "data.frame")
# value source_index
# 1 A 1
# 2 B 1
# 3 C 1
# 4 D 2
# 5 E 2
# 6 F 3
# . . .
# 17 N 17
具有索引 1-17 和 17 个元素的大型命名列表 list_df
:
list[17]
# name Type Value
apple char[5] apple is red..
orange char[8] orange is sweet..
....
1st element: list_df[["apple"]]
2nd element: list_df[["orange"]]
...
17th element: list_df[["bana"]]
df 中带有新列的所需输出
df
# value source_index new col
# 1 A 1 apple
# 2 B 1 apple
# 3 C 1 apple
# 4 D 2 orange
# 5 E 2 orange
# 6 F 3 orange
# . . .
# 17 N 17 bana
我试过 match(df$source_index, names(list_df)) 或 seq_along(list_df) 但它返回了所有 NA。
提前致谢!
你可以这样做:
df %>% mutate(new_col = names(list_df)[source_index])
输出(前 10 行):
value source_index new_col
1 W 1 a
2 V 1 a
3 M 1 a
4 H 1 a
5 Z 1 a
6 V 2 b
7 J 2 b
8 F 2 b
9 Y 3 c
10 B 3 c
输入:
set.seed(123)
df = data.frame(value = sample(LETTERS,100, replace=T), source_index= sample(1:17, 100, replace=T)) %>% arrange(source_index)
list_df =as.list(1:17)
names(list_df) <- letters[1:17]
我有一个数据框列 (df$source_index
),其中包含 100 个 obs,索引属于 1-17,另一个列表 (list_df
) 的名称和相同索引属于 1-17。我如何在此数据框中创建(变异)一列,只要来自 df 列的索引(df$source_index
)和列表的索引(list_df
)匹配(是相同的值) , 它 returns 列表的名称?
df
dput(df)
structure(list(value = c(A,B,C,D,E,F,....N), source_index = c(1,1,1,2,2,3..17)), .Names = c("value ",
"source_index"), row.names = c(NA, 17L), class = "data.frame")
# value source_index
# 1 A 1
# 2 B 1
# 3 C 1
# 4 D 2
# 5 E 2
# 6 F 3
# . . .
# 17 N 17
具有索引 1-17 和 17 个元素的大型命名列表 list_df
:
list[17]
# name Type Value
apple char[5] apple is red..
orange char[8] orange is sweet..
....
1st element: list_df[["apple"]]
2nd element: list_df[["orange"]]
...
17th element: list_df[["bana"]]
df 中带有新列的所需输出
df
# value source_index new col
# 1 A 1 apple
# 2 B 1 apple
# 3 C 1 apple
# 4 D 2 orange
# 5 E 2 orange
# 6 F 3 orange
# . . .
# 17 N 17 bana
我试过 match(df$source_index, names(list_df)) 或 seq_along(list_df) 但它返回了所有 NA。
提前致谢!
你可以这样做:
df %>% mutate(new_col = names(list_df)[source_index])
输出(前 10 行):
value source_index new_col
1 W 1 a
2 V 1 a
3 M 1 a
4 H 1 a
5 Z 1 a
6 V 2 b
7 J 2 b
8 F 2 b
9 Y 3 c
10 B 3 c
输入:
set.seed(123)
df = data.frame(value = sample(LETTERS,100, replace=T), source_index= sample(1:17, 100, replace=T)) %>% arrange(source_index)
list_df =as.list(1:17)
names(list_df) <- letters[1:17]