gpt4 book ai didi

r - 如何使用 tidyr::unite 函数删除 NA?

转载 作者:行者123 更新时间:2023-12-04 11:32:56 25 4
gpt4 key购买 nike

将几列与 tidyr::unite() 合并后, 来自缺失数据的 NA 保留在我的字符向量中,这是我不想要的。

我每行有一系列医疗诊断(每列 1 个),并希望通过基准搜索一系列代码。 %in%grepl() .

Github 上有一个 Unresolved 问题在这个问题上,是否有任何 Action - 或解决方法?我想保持矢量逗号分隔。

下面是一个有代表性的例子:

library(dplyr)
library(tidyr)

df <- data_frame(a = paste0("A.", rep(1, 3)), b = " ", c = c("C.1", "C.3", " "), d = "D.4", e = "E.5")

cols <- letters[2:4]
df[, cols] <- gsub(" ", NA_character_, as.matrix(df[, cols]))
tidyr::unite(df, new, cols, sep = ",")

电流输出:
# # A tibble: 3 x 3
# a new e
# <chr> <chr> <chr>
# 1 A.1 NA,C.1,D.4 E.5
# 2 A.1 NA,C.3,D.4 E.5
# 3 A.1 NA,NA,D.4 E.5

期望的输出:
# # A tibble: 3 x 3
# a new e
# <chr> <chr> <chr>
# 1 A.1 C.1,D.4 E.5
# 2 A.1 C.3,D.4 E.5
# 3 A.1 D.4 E.5

最佳答案

中新tidyr ,您现在可以使用 na.rm要删除的参数 NA值。

library(tidyr)
library(dplyr)

df %>% unite(new, cols, sep = ",", na.rm = TRUE)

# a new e
# <chr> <chr> <chr>
#1 A.1 C.1,D.4 E.5
#2 A.1 C.3,D.4 E.5
#3 A.1 D.4 E.5

然而, NA如果有列是因子,则不会删除 s。我们需要在使用 unite 之前将它们更改为字符.
df %>% 
mutate_all(as.character) %>%
unite(new, cols, sep = ",", na.rm = TRUE)

您也可以使用基数 R apply方法相同。
apply(df[cols], 1, function(x) toString(na.omit(x)))
#[1] "C.1, D.4" "C.3, D.4" "D.4"

数据
df <- data_frame(
a = c("A.1", "A.1", "A.1"),
b = c(NA_character_, NA_character_, NA_character_),
c = c("C.1", "C.3", NA),
d = c("D.4", "D.4", "D.4"),
e = c("E.5", "E.5", "E.5")
)

cols <- letters[2:4]

关于r - 如何使用 tidyr::unite 函数删除 NA?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52712390/

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