gpt4 book ai didi

R - 将两列合并到一个数据框中,创建新的列标题,使用 lapply 和 merge 在大型数据集上重复

转载 作者:行者123 更新时间:2023-12-05 06:34:20 26 4
gpt4 key购买 nike

我是 R 的新手,我有一个由数据和标志列组织的大型数据框(1700 列):

df <- data.frame( "100249 MERCURY TOTAL ug/L" = runif(10),
"100397 TRIHALOMETHANES ug/L" = runif(10),
"100397 TRIHALOMETHANES ug/L FLAG" = c("L", "L", NA, "L", "L", NA, "L", NA, NA, NA),
"100407 XYLENE ug/L" = runif(10),
"100407 XYLENE ug/L FLAG" = c("L", NA, "L", "L", "L", NA, "L", NA, "L", "L"),
check.names=FALSE )

数据没有模式,并非每个参数都有关联的 FLAG 列。

我想将匹配的数据和标志合并在一起,首先是标志,然后是每个单元格中的数字数据,然后将合并的列重命名为“100397 TRIHALOMETHANES ug/_COMB”,并对每对数据和标志列重复.

到目前为止,我已经知道如何使用 grepl 搜索 FLAG 列,使用 gsub 和 paste0 创建一个新标题,但是用于组合列的 lapply 和 merge 函数对我不起作用。我也一直在阅读人们使用“粘贴”或 tidyr 的“联合”来合并列,但到目前为止还没有成功。

我的代码示例:

lapply(df, function(x) if (grepl("*\\FLAG$", colnames(df(x)))) {


newcol = paste0("df$", gsub("*\\FLAG$", "", colnames(df(x))), "_COMB")
assign(newcol, merge(df[x], df[x-1], all= T))

})

如有任何建议,我们将不胜感激,谢谢。

最佳答案

Reduce(f = function(dat, col) {
x <- sub(" ?FLAG$", "", col)
if (!x %in% names(dat)) return(dat)
dat[paste0(x, "_COMB")] <- paste(dat[[col]], dat[[x]])
dat[c(col, x)] <- NULL
dat
}, x = grep("FLAG$", names(df), value = TRUE), init = df)

# 100249 MERCURY TOTAL ug/L 100397 TRIHALOMETHANES ug/L_COMB 100407 XYLENE ug/L_COMB
# 1 0.04353999 L 0.375519647961482 L 0.95818781433627
# 2 0.49308933 L 0.931443430483341 NA 0.744603316066787
# 3 0.68270299 NA 0.409499574452639 L 0.993966163368896
# 4 0.26546071 L 0.0351015995256603 L 0.696171462768689
# 5 0.95956891 L 0.603019695729017 L 0.709421107778326
# 6 0.01842927 NA 0.96781362616457 NA 0.201458259951323
# 7 0.12114176 L 0.734256325522438 L 0.457969205919653
# 8 0.93771709 NA 0.309347201371565 NA 0.508297981694341
# 9 0.47122685 NA 0.822285959031433 L 0.87013426842168
# 10 0.11501974 NA 0.56137450854294 L 0.153437153436244

或者:

dat <- df
for (col in grep("FLAG$", names(df), value = TRUE)) {
x <- sub(" ?FLAG$", "", col)
if (!x %in% names(dat)) next
dat[paste0(x, "_COMB")] <- paste(dat[[col]], dat[[x]])
dat[c(col, x)] <- NULL
}
dat

关于R - 将两列合并到一个数据框中,创建新的列标题,使用 lapply 和 merge 在大型数据集上重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50296190/

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