[3] "cr-6ren">
gpt4 book ai didi

r - 删除 NA 并使用牛津逗号的跨列串联

转载 作者:行者123 更新时间:2023-12-04 09:36:52 25 4
gpt4 key购买 nike

我想实现跨列的串联,删除 NA 并观察牛津逗号。

    x <-  data.frame(ID = 1:3,
col1 = c("snap", "snap", NA),
col2 = c(NA, "crackle", "crackle"),
col3 = c(NA, NA, "pop"),
col4 = c(NA, "yummy", NA))

我想使用上面的数据框连接 col1:col4 并将结果返回给 x$treats

x$treats[1]
"snap"

x$treats[2]
"snap, crackle, and yummy"

x$treats[3]
"crackle and pop"

数据集还有一个不应包含在串联中的 ID 变量(因此不允许我指定所需列的解决方案是不完整的)。

最佳答案

这是另一种选择,尽管要冗长得多。通过将列表生成包装到一个函数中,如果需要,我们还可以添加一个选项来禁用牛津逗号:

x <-  data.frame(
ID = 1:3,
col1 = c("snap", "snap", NA),
col2 = c(NA, "crackle", "crackle"),
col3 = c(NA, NA, "pop"),
col4 = c(NA, "yummy", NA)
)

language_list <- function(x, oxford_comma = TRUE) {
x <- x[!is.na(x)]

if (length(x) < 2) {
return(x)
}

last <- tail(x, 1)
rest <- head(x, -1)

if (length(rest) == 1) {
return(paste(rest, "and", last))
}

rest <- paste(rest, collapse = ", ")
paste0(rest, if (oxford_comma) ",", " and ", last)
}

cols <- paste0("col", 1:4)
x$treats <- apply(x[, cols], 1, language_list)

x$treats
#> [1] "snap" "snap, crackle, and yummy"
#> [3] "crackle and pop"

关于r - 删除 NA 并使用牛津逗号的跨列串联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49124897/

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