我有一个小标题或数据框的列表(每个小标题或列表中都有一个名称),我想要:(1)long.col
在每个小标题中用不同名称的变量创建一个具有相同名称的新列;(2)通过匹配另一个小词,并在每个小词中最后用关键字链接小词名称和列名来完成此操作;(3)为long.col
每个小标题中具有相同名称的所有新创建的列绑定行,并标识它们来自的原始小标题。
我想最好使用tidyverse函数来做到这一点。这是两个示例:a)小标题列表;b)关键小标题,标识小标题的名称和变量
df1 <- tibble(v1 = c(rep("A", 5), rep("B", 5)),
v2 = 1:10)
df2 <- tibble(v1 = c(rep("C", 6), rep("D", 6)),
v3 = 11:22)
df3 <- tibble(v1 = c(rep("E", 4), rep("F", 4)),
v4 = 23:30)
list.df <- list(df1, df2, df3)
names(list.df) <- c("data1", "data2", "data3")
key <- tibble(data = c("data1", "data2", "data3"),
vars = c("v2", "v3", "v4"))
最终输出应如下所示:
final.df <- tibble(data = c(rep("data1", 10), rep("data2", 12), rep("data3", 8)),
long.col = 1:30)
我需要使用多个列在更长的列表中执行此操作,因此对每个小标题中的每个列分别执行操作是不可行的。
你可以map2
在这里使用
library(purrr)
library(tibble)
out <- map2_df(.x = list.df,
.y = names(list.df),
.f = ~ {
temp <- key[["vars"]][key[['data']] == .y]
tibble(data = .y, long.col = .x[[temp]])
})
检查输出
identical(final.df, out)
#[1] TRUE
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句