-1

如果任何一列为空,如何替换同一行中“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, 6L, 8L, 8L, 8L, 8L), 
    ColB = c("2", "4", "4", "5", "5", "", "1", "1", "")), row.names = c(NA, 
-9L), class = "data.frame")
4

2 回答 2

2

在基础 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
于 2021-02-04T13:34:21.840 回答
0

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

library(tidyverse)

df1 <- structure(list(GID = c("1", "2", "3", "4", "5", "NG1", "MG2", "MG3", "NG4"), ColA = c(2L, 3L, 5L, 6L, 6L, 8L, 8L, 8L, 8L), ColB = c("2", "4", "4", "5", "5", "", "1", "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 包于 2021-02-05 创建(v0.3.0)

于 2021-02-04T11:43:56.533 回答