微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果在 R 编程中任何列为空,如何替换同一行中的“N”

如何解决如果在 R 编程中任何列为空,如何替换同一行中的“N”

如果任何列为空,如何替换同一行中“GID”列中的字符“N”

DataFile <- extract_tables("new.pdf",pages = c(87),method = "stream",output = "data.frame",guess = TRUE)
DataFrame<-as.data.frame(DataFile)

#removing No. and A# from columns
df2<-subset(DataFrame,Group!="No." & Group!="A#") 

输出

GID    ColA    ColB 
1       2       2
2       3       4
3       5       4
4       6       5
5       6       5
NG1     8 
MG2     8       1
MG3     8       1
NG4     8 

预期输出

GID    ColA    ColB 
1       2       2
2       3       4
3       5       4
4       6       5
5       6       5
G1     8       N
MG2     8       1
MG3     8       1
G4     8       N

数据:

df1 <-  structure(list(GID = c("1","2","3","4","5","NG1","MG2","MG3","NG4"),ColA = c(2L,3L,5L,6L,8L,8L),ColB = c("2","","1","")),row.names = c(NA,-9L),class = "data.frame")

解决方法

在基础 R 中,您可以尝试以下操作。

首先,确定 ColB 为空字符值的行,并存储在逻辑向量中:

emp_rows <- df1$ColB == ""

然后,删除这些行中 GID 中的“N”:

df1$GID[emp_rows] <- gsub("N","",df1$GID[emp_rows])

并将“N”存储在 ColB 的相同行中:

df1$ColB[emp_rows] <- "N"

要概括任何空白列,您可以执行以下操作。根据注释中的逻辑,首先检查 GID 是否以“N”开头。如果是,删除“N”,然后检查所有列是否为空值,如果为空,则替换为“N”。

您可以创建一个函数来执行此操作,然后使用 apply 或其他方法按行遍历您的数据框。

my_fun <- function(vec) {
  if (startsWith(vec[["GID"]],"N")) {
    vec[["GID"]] <- gsub("N",vec[["GID"]])
    vec <- replace(vec,vec == "","N")
  }
  return(vec)
}

data.frame(t(apply(df1,1,my_fun)))

输出

  GID ColA ColB
1   1    2    2
2   2    3    4
3   3    5    4
4   4    6    5
5   5    6    5
6  G1    8    N
7 MG2    8    1
8 MG3    8    1
9  G4    8    N
,

通过这种方式,如果您选择不提及列名,您可以用 N 或任何其他字符替换空字符

library(tidyverse)

df1 <- structure(list(GID = c("1","2","3","4","5","NG1","MG2","MG3","NG4"),ColA = c(2L,3L,5L,6L,8L,8L),ColB = c("2","1","")),row.names = c(NA,-9L),class = "data.frame")

df1 %>% 
  mutate(across(everything(),~str_replace(.,"^$","N")),GID = GID %>% str_remove("N"))
#>   GID ColA ColB
#> 1   1    2    2
#> 2   2    3    4
#> 3   3    5    4
#> 4   4    6    5
#> 5   5    6    5
#> 6  G1    8    N
#> 7 MG2    8    1
#> 8 MG3    8    1
#> 9  G4    8    N

reprex package (v0.3.0) 于 2021 年 2 月 5 日创建

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。