繁体   English   中英

在R中使用paste()替换NA

[英]Replacing NA using paste() in R

我的数据框有9列和3198行。 在其中一列中,“ NA”每82行重复一次。 我正在尝试将缺失的值替换为同一数据框中其他列的值。 让我用一个小的数据集来说明:

df <- data.frame(a = LETTERS[1:6], b = rep(seq(1:3), 2))

df$b[1] <- 'NA'
df$b[4] <- 'NA'

> df
  a  b
1 A NA
2 B  2
3 C  3
4 D NA
5 E  2
6 F  3

for (i in 1: nrow(df)){
        if ('NA' %in% df$b[i]){

                df$b[i] <- paste("box", df$a[i])
        }
}

> df
  a     b
1 A box A
2 B     2
3 C     3
4 D box D
5 E     2
6 F     3

该代码可在此小型数据集中使用。 我在更大的数据集中做着完全相同的事情,但是由于某些原因,丢失的值仍然没有被替换。 知道会发生什么吗? 鉴于我的代码可在此处的示例数据集中使用,并且我无法发布实际的数据集供您查看,因此这可能是一个奇怪的问题。 以下内容可能会有所帮助:

> str(dataset)
'data.frame':        3198 obs. of  8 variables:
$ Local Identifier         : chr  "NEZ0100" "NEZ0100-1" "NEZ0100-2" "NEZ0100-3" ...
$ Local System             : chr  "Freezerworks" "Freezerworks" "Freezerworks" "Freezerworks" ...
$ Parent ID                : chr  "NEZ0100" "NEZ0100" "NEZ0100" "NEZ0100" ...
$ Storage Type             : chr  "Box-9X9" "BoxPos" "BoxPos" "BoxPos" ...
$ Storage Label            : chr  NA "A1" "A2" "A3" ...
$ Capacity                 : int  81 1 1 1 1 1 1 1 1 1 ...
$ Movable                  : chr  "Y" "N" "N" "N" ...
$ Storage Unit Order Number: int  0 1 2 3 4 5 6 7 8 9 ...

该问题出现在$ Storage Label中。 如果您需要任何其他信息,请告诉我。 谢谢。

R使用NA表示缺失值。 注意NA是一个特殊值,不同于字符值"NA" 由于您的str(dataset)显示NA值不带引号,因此我们知道它是R的特殊NA值,而不是字符串。 因此,对于您的示例,它实际上更像

df <- data.frame(a = LETTERS[1:6], b = rep(seq(1:3), 2))
df$b[1] <- NA
df$b[4] <- NA

您测试NA使用is.na()而不是=='NA' 另外,我们这里不需要任何循环来替换NA值,我们可以做

df$b[is.na(df$b)]<-paste("box", df$a[is.na(df$b)])
df

这给了我们

  a     b
1 A box A
2 B     2
3 C     3
4 D box D
5 E     2
6 F     3

请注意,在此处使用paste将把该列从数字转换为字符,但是看起来您的实际“存储标签”列还是字符,因此不会进行任何更改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM