Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.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 将数据框中的星号替换为NA';s_R - Fatal编程技术网

R 将数据框中的星号替换为NA';s

R 将数据框中的星号替换为NA';s,r,R,这是我的数据帧df 我正在努力: df=data.frame(rbind(c(1,"*","*"),c("*",3,"*")) df2=as.data.frame(sapply(df,sub,pattern="*",replacement="NA")) 因为星号的原因,它不起作用,但我正在为替换它而生气。你应该举一个完整的可复制的例子,当你让他们变得容易时,人们会更倾向于帮助他们。任何人 dat <- data.frame(a=c(1,2,'*',3,4), b=c('*',2,3,4,

这是我的数据帧df

我正在努力:

df=data.frame(rbind(c(1,"*","*"),c("*",3,"*"))
df2=as.data.frame(sapply(df,sub,pattern="*",replacement="NA"))

因为星号的原因,它不起作用,但我正在为替换它而生气。

你应该举一个完整的可复制的例子,当你让他们变得容易时,人们会更倾向于帮助他们。任何人

dat <- data.frame(a=c(1,2,'*',3,4), b=c('*',2,3,4,'*'))
> dat
  a b
1 1 *
2 2 2
3 * 3
4 3 4
5 4 *
> as.data.frame(sapply(dat,sub,pattern='\\*',replacement=NA))
     a    b
1    1 <NA>
2    2    2
3 <NA>    3
4    3    4
5    4 <NA>
dat-dat
a b
1 1 *
2 2 2
3 * 3
4 3 4
5 4 *
>as.data.frame(sapply(dat,sub,pattern='\\\*',replacement=NA))
a b
1    1 
2    2    2
3     3
4    3    4
5    4 

你应该举一个完整的可复制的例子,当你让他们变得容易时,人们会更倾向于帮助他们。任何人

dat <- data.frame(a=c(1,2,'*',3,4), b=c('*',2,3,4,'*'))
> dat
  a b
1 1 *
2 2 2
3 * 3
4 3 4
5 4 *
> as.data.frame(sapply(dat,sub,pattern='\\*',replacement=NA))
     a    b
1    1 <NA>
2    2    2
3 <NA>    3
4    3    4
5    4 <NA>
dat-dat
a b
1 1 *
2 2 2
3 * 3
4 3 4
5 4 *
>as.data.frame(sapply(dat,sub,pattern='\\\*',replacement=NA))
a b
1    1 
2    2    2
3     3
4    3    4
5    4 

如果您的
数据帧中有
*
(意思是它不像
ab*de
),那么,您可以在不使用
正则表达式的情况下执行此操作:

df[df == "*"] <- NA

df[df==“*”]如果您的
data.frame中有
*
(意思是它不像
ab*de
),那么,您可以在不使用
regex
的情况下执行此操作:

df[df == "*"] <- NA

df[df==“*”]这里的两种解决方案都解决了您工作场所中已经存在的对象。如果可能(或者至少将来),您可以使用
read.table
中的
na.strings
参数。请注意,它是复数“字符串”,因此您应该能够指定多个字符作为
NA
值处理

下面是一个例子:它只是将一个名为“readmein.txt”的文件写入当前的工作目录,并验证它是否存在

cat("V1 V2 V3 V4 V5 V6 V7\n
2 * * * * * 2\n
1 2 * * * * 1\n", file = "readmein.txt")
list.files(pattern = "readme")
# [1] "readmein.txt"
下面是
read.table
,其中
na.strings
参数起作用

read.table("readmein.txt", na.strings="*", header = TRUE)
#   V1 V2 V3 V4 V5 V6 V7
# 1  2 NA NA NA NA NA  2
# 2  1  2 NA NA NA NA  1
更新:工作区中已存在对象 我看到了另外两个答案的另一个问题:它们都会导致字符(或者更确切地说是因子)变量,即使列可能是数字

这里有一个例子。首先,我们创建一个示例数据集。为了好玩,我添加了另一个字符作为
NA
:“

这里有一个解决方法:

temp2 <- read.table(text = capture.output(temp), na.strings = c("*", "."))
temp2
#   V1 V2   V3 V4
# 1  1  1    a NA
# 2  2 NA <NA> NA
# 3  3  3    c  3
str(temp2)
# 'data.frame':  3 obs. of  4 variables:
#  $ V1: int  1 2 3
#  $ V2: int  1 NA 3
#  $ V3: Factor w/ 2 levels "a","c": 1 NA 2
#  $ V4: int  NA NA 3

这里的两种解决方案都解决了工作场所中已有的对象。如果可能(或者至少将来),您可以使用
read.table
中的
na.strings
参数。请注意,它是复数“字符串”,因此您应该能够指定多个字符作为
NA
值处理

下面是一个例子:它只是将一个名为“readmein.txt”的文件写入当前的工作目录,并验证它是否存在

cat("V1 V2 V3 V4 V5 V6 V7\n
2 * * * * * 2\n
1 2 * * * * 1\n", file = "readmein.txt")
list.files(pattern = "readme")
# [1] "readmein.txt"
下面是
read.table
,其中
na.strings
参数起作用

read.table("readmein.txt", na.strings="*", header = TRUE)
#   V1 V2 V3 V4 V5 V6 V7
# 1  2 NA NA NA NA NA  2
# 2  1  2 NA NA NA NA  1
更新:工作区中已存在对象 我看到了另外两个答案的另一个问题:它们都会导致字符(或者更确切地说是因子)变量,即使列可能是数字

这里有一个例子。首先,我们创建一个示例数据集。为了好玩,我添加了另一个字符作为
NA
:“

这里有一个解决方法:

temp2 <- read.table(text = capture.output(temp), na.strings = c("*", "."))
temp2
#   V1 V2   V3 V4
# 1  1  1    a NA
# 2  2 NA <NA> NA
# 3  3  3    c  3
str(temp2)
# 'data.frame':  3 obs. of  4 variables:
#  $ V1: int  1 2 3
#  $ V2: int  1 NA 3
#  $ V3: Factor w/ 2 levels "a","c": 1 NA 2
#  $ V4: int  NA NA 3
这可能会奏效(这是一个非常灵活的解决方案),但已经有了其他很好的解决方案。Arun的解决方案是我的典型方法,但是为新的R(很少使用命令行)用户创建了
replacer
。我不建议任何有一点经验的人使用
replacer

library(qdap)
replacer(dat, "*", NA)
这可能会奏效(这是一个非常灵活的解决方案),但已经有了其他很好的解决方案。Arun的解决方案是我的典型方法,但是为新的R(很少使用命令行)用户创建了
replacer
。我不建议任何有一点经验的人使用
replacer

library(qdap)
replacer(dat, "*", NA)

双反斜杠是逃离星号等特殊字符的秘密,请看这里:@Ben感谢我注意到了这个双反斜杠是逃离星号等特殊字符的秘密,请看这里:@Ben感谢我注意到了这个Cheers Arun,没有足够的时间把帖子放在一起:/1个月内有双胞胎在路上,这样对hahacheers Arun没有帮助,没有足够的时间把帖子放在一起:/1个月内有双胞胎在路上,这样对hahaUsing没有帮助(更新2),根据行中包含的其他条目,我得到
NA
,例如
V1=c(1,“*”,“1”)
V1=c(1,“*”,“a”)
。。。因此,对于您的temp data.frame,我得到了
2 NA
@PatrickT,我不确定我是否理解您的评论。我试图在这个答案中指出的一点是,在确定如何处理缺失值时,通常应分别对待每一列。你能详细说明你的评论吗?对不起,我误解了。谢谢使用最后一种方法(更新2),根据行中包含的其他条目,我得到
NA
,例如
V1=c(1,“*”,“1”)
V1=c(1,“*”,“a”)
。。。因此,对于您的temp data.frame,我得到了
2 NA
@PatrickT,我不确定我是否理解您的评论。我试图在这个答案中指出的一点是,在确定如何处理缺失值时,通常应分别对待每一列。你能详细说明你的评论吗?对不起,我误解了。谢谢