% html_table() df <- as.data.frame(df) #-6ren">
gpt4 book ai didi

r - 空白字符串不能用R中的NA替换

转载 作者:行者123 更新时间:2023-12-04 11:06:50 26 4
gpt4 key购买 nike

我想用 NA 替换空格。一个简单的方法可能是 df[df == ""] <- NA ,这适用于我的数据框的大部分单元....但不适合所有人!

我有以下代码:

library(rvest)
library(dplyr)
library(tidyr)

#Read website
htmlpage <- read_html("http://www.soccervista.com/results-Liga_MX_Apertura-2016_2017-844815.html")

#Extract table
df <- htmlpage %>% html_nodes("table") %>% html_table()
df <- as.data.frame(df)

#Set whitespaces into NA's
df[df == ""] <- NA

我发现有些空格在引号之间有一点空格

df[11,1]
[1] " "

所以我的解决方案是执行下一步:df[df == " "] <- NA

但是问题仍然存在,而且有一点空白!我以为 trim 函数会起作用,但它没有...

#Trim
df[,c(1:10)] <- sapply(df[,c(1:10)], trimws)

然而,问题无法解决。

有什么想法吗?

最佳答案

我们需要使用 lapply 而不是 sapply 因为 sapply 返回一个 matrix 而不是 list 这会在引号中产生问题。

df[1:10] <- lapply(df[1:10], trimws)

如果我们有像 "" 这样的空格,另一种选择是使用 gsub 将这些空格替换为 ""

df[1:10] <- lapply(df[,c(1:10)], function(x) gsub("^\\s+|\\s+$", "", x))

然后将 "" 更改为 NA

df[df == ""] <- NA

或者我们可以一次完成并使用 type.convert 更改 class 而不是进行两次替换

df[] <- lapply(df, function(x)
type.convert(replace(x, grepl("^\\s*$", trimws(x)), NA), as.is = TRUE))

注意:当所有列都循环时,我们不必指定列索引

关于r - 空白字符串不能用R中的NA替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41530892/

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