Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R.问题排除“问题排除”#姓名;(从excel导入)在dataframe中_R_Dataframe_Excel Import - Fatal编程技术网

R.问题排除“问题排除”#姓名;(从excel导入)在dataframe中

R.问题排除“问题排除”#姓名;(从excel导入)在dataframe中,r,dataframe,excel-import,R,Dataframe,Excel Import,我有一个从excel导入的.csv,其中有我正在尝试删除的公式挂起。 下面是数据的简单版本 library(tidyverse) df <- data.frame( species = letters[1:5], param1 = c("Place", "creek", "river", "#VALUE!", "desert"), param2 = c(-23.8, 43.23,

我有一个从excel导入的.csv,其中有我正在尝试删除的公式挂起。 下面是数据的简单版本

library(tidyverse)
df <- data.frame(
  species = letters[1:5],
  param1 = c("Place", "creek", "river", "#VALUE!", "desert"),
  param2 = c(-23.8, 43.23, "#NAME?", 45, 0.23),
  param3 = c(2.4, 2, 5.7, 0.00003, -2.5),
  stringsAsFactors = FALSE
) # This is a simplified version of the excel .csv import

df[df == "#VALUE!"] <- ""     # Removes excel cells where the formula left "#VALUE!"
df[df == "#NAME\\?"] <- ""   # This does not work

ndf <- df  # This is an attempt to reassign the columns to numeric
ndf
class(ndf$param2)
class(ndf$param3)
库(tidyverse)

df您正在进行精确匹配(而不是正则表达式匹配),因此不需要以不同方式转义特殊变量(如
)。尝试:

df[df == "#VALUE!"] <- ""  
df[df == "#NAME?"] <- NA
df <- type.convert(df, as.is = TRUE)
df
#  species param1 param2   param3
#1       a  Place -23.80  2.40000
#2       b  creek  43.23  2.00000
#3       c  river     NA  5.70000
#4       d         45.00  0.00003
#5       e desert   0.23 -2.50000

str(df)
#'data.frame':  5 obs. of  4 variables:
# $ species: chr  "a" "b" "c" "d" ...
# $ param1 : chr  "Place" "creek" "river" "" ...
# $ param2 : num  -23.8 43.23 NA 45 0.23
# $ param3 : num  2.4 2 5.7 0.00003 -2.5

df[df==“#VALUE!”]您正在进行精确匹配(而不是正则表达式匹配),因此不需要以不同方式转义特殊变量(如
)。尝试:

df[df == "#VALUE!"] <- ""  
df[df == "#NAME?"] <- NA
df <- type.convert(df, as.is = TRUE)
df
#  species param1 param2   param3
#1       a  Place -23.80  2.40000
#2       b  creek  43.23  2.00000
#3       c  river     NA  5.70000
#4       d         45.00  0.00003
#5       e desert   0.23 -2.50000

str(df)
#'data.frame':  5 obs. of  4 variables:
# $ species: chr  "a" "b" "c" "d" ...
# $ param1 : chr  "Place" "creek" "river" "" ...
# $ param2 : num  -23.8 43.23 NA 45 0.23
# $ param3 : num  2.4 2 5.7 0.00003 -2.5

df[df==“#VALUE!”]这里有一个
dplyr
解决方案,它使用
sub
一次性替换不需要的值:

df %>%
  mutate(across(matches("\\d"), ~sub("#.*", "NA", .)))
  species param1 param2 param3
1       a  Place  -23.8    2.4
2       b  creek  43.23      2
3       c  river     NA    5.7
4       d     NA     45  3e-05
5       e desert   0.23   -2.5
如果您不知道不需要的值出现在哪些列中,此解决方案很有用:

library(stringr)
df %>% 
  mutate(across(where(~any(str_detect(.,"#"))), ~sub("#.*", "NA", .)))
第三种解决方案在任何地方都会替换不需要的值,并将列转换为正确的类型(感谢@Ronak的启发):


这里有一个带有
sub
dplyr
解决方案,可以一次性替换不需要的值:

df %>%
  mutate(across(matches("\\d"), ~sub("#.*", "NA", .)))
  species param1 param2 param3
1       a  Place  -23.8    2.4
2       b  creek  43.23      2
3       c  river     NA    5.7
4       d     NA     45  3e-05
5       e desert   0.23   -2.5
如果您不知道不需要的值出现在哪些列中,此解决方案很有用:

library(stringr)
df %>% 
  mutate(across(where(~any(str_detect(.,"#"))), ~sub("#.*", "NA", .)))
第三种解决方案在任何地方都会替换不需要的值,并将列转换为正确的类型(感谢@Ronak的启发):


我懂了。先前的一次尝试抛出了有关
的错误,因此这就是我走上这条道路的原因。如果我没记错的话,
NA
以后也会有问题。是否有一种优雅的方法将其保留为空?在R中,列只能有一种类型将其设置为空会将其更改为字符而不是数字。我在excel工作表参数中有空白单元格,这些单元格为空,并在参数列中显示为空。例如,param3[2]可能为空,只要该列没有以字符串开头,param3仍将显示为class
numeric
。我不确定我是否理解这种情况的区别。对不起,我不理解你的问题。您可以使用
class(df$param2)
了解任何列的类。运行我的答案中的代码后,您可以再次检查该类,看看它是否按预期更改。可以导入param3(例如,
df我明白了。先前的一次尝试抛出了有关
的错误,因此这就是引导我走上这条道路的原因。如果我回忆正确,
NA
以后也会成为一个问题。是否有一种优雅的方法将其保留为空?在R中,列只能有一种类型将其变为空将其更改为字符而不是数字。I h将excel工作表参数中的空白单元格保留为空白,并在参数列中显示为空白。例如,param3[2]可能为空,并且只要该列不是以字符串开头,param3仍将显示为class
numeric
。我不确定我是否理解这种情况下的区别。抱歉,我不理解您的问题。您可以使用
class(df$param2)
了解任何列的类。运行我的答案中的代码后,您可以再次检查类,看看它是否按预期更改。可以导入param3(例如
df