【发布时间】:2020-04-17 19:11:09
【问题描述】:
我正在尝试根据每个数据框的名称将变量列添加到数据框列表中。
这里的想法是每个数据框代表特定分析物的特定测试结果。测试结果是数字的,但是我的分析仪会给我低于它能够可靠读取的数字(检测限;LOD),这在我的数据中造成混乱的废话。我想过滤掉小于 LOD 的结果,但是每个分析物(列表中的数据框)都有不同的 LOD。这是一个可重现的示例:
#A list of two dataframes representing analytes called "A" and "C" with results from 2 analyzers (X and Y)
df.list <- list(A=data.frame(id=c("P1", "P2", "P3", "P4"), X1=c(1,2,5, 3), Y1=c(4,5,8,6)),
C=data.frame(id=c("P1", "P2", "P3", "P4"), X1=c(4,NA,6, 7), Y1=c(4,NA,7,6)))
#A third dataframe (not in the list) containing the identity and LoD of each analyte
lod.input <- data.frame(Analyte = c("A","C"), LoD = c(1,10))
现在我要做的是将lod.input 数据帧列表中的“分析物”列中的变量与names(df.list) 标识匹配,并在具有LOD 的数据帧lod.input 列表中输出一列与该分析物相关。
到目前为止,我可以输入一个新列,列出来自列表中的一个数据框的 LOD
junk <- lapply(df.list, function(x) data.frame(x, LOD = lod.input$LoD[match(names(df.list[2]), lod.input$Analyte)]))
junk
$A
id X Y LOD
1 P1 1 4 10
2 P2 2 5 10
3 P3 5 8 10
4 P4 3 6 10
$C
id X Y LOD
1 P1 4 4 10
2 P2 NA NA 10
3 P3 6 7 10
4 P4 7 6 10
但我似乎无法弄清楚如何匹配它们或合并更多 LOD。
junk <- lapply(df.list, function(x) data.frame(x, LOD = lod.input$LoD[match(names(x[1]), lod.input$Analyte)]))
junk
$A
id X Y LOD
1 P1 1 4 NA
2 P2 2 5 NA
3 P3 5 8 NA
4 P4 3 6 NA
$C
id X Y LOD
1 P1 4 4 NA
2 P2 NA NA NA
3 P3 6 7 NA
4 P4 7 6 NA
我想我可能需要一个嵌套的 lapply 函数,但我似乎无法弄清楚。帮助表示赞赏!
【问题讨论】:
-
如果你想通过管道传输数据,我建议使用 purrr::map(~ function(x))
标签: r