如何替换r中的空单元格

时间:2017-05-23 12:38:40

标签: r csv dataframe replace

我在R中有一个data.frame,并希望以特定方式填充一些空单元格。下面是表格。

Case.ID   |   Resource
-----------------------
   1      |     501
-----------------------
   1      | 
-----------------------
   1      |      0
-----------------------
   1      |      
-----------------------
   2      |    524
-----------------------

在这里,我想将空单元格替换为每个Case.ID的第一个值,在这种情况下,将Case.ID = 1的空单元格替换为501而不是0。

4 个答案:

答案 0 :(得分:2)

您可以在基地R中使用replace

with(df, ave(v2, v1, FUN = function(i) replace(i, i == '', i[1])))

答案 1 :(得分:1)

假设您的文件中的空格被导入NA,这将使用dplyr

library(dplyr)

# Create data frame to match post
df <- data.frame(Case.ID = c(1, 1, 1, 1, 2),
                 Resource = c(501, NA, 0, NA, 524))

df <- df %>%
  group_by(Case.ID) %>%
  mutate(Resource = if_else(is.na(Resource), head(Resource, 1), Resource))

df
# Case.ID Resource
# <dbl>    <dbl>
#    1      501
#    1      501
#    1        0
#    1      501
#    2      524

答案 2 :(得分:1)

我们可以使用data.table

library(data.table)
setDT(df1)[, v1 := Resource[1L], Case.ID][is.na(Resource), Resource := v1][, v1 := NULL][]  

或另一个选项是na.aggregate

library(zoo)
setDT(df)[, Resource := na.aggregate(Resource, FUN = function(x) x[1]), Case.ID]

答案 3 :(得分:1)

一旦你在R中导入它(比如说df),空的那些就转换成NA了。因此:

  Case.ID Resource
1       1      501
2       1       NA
3       1        0
4       1       NA
5       2      524

因此:

df$Resource<-ifelse(is.na(df$Resource),df$Case.ID,df$Resource)

屈服:

Case.ID Resource
1       1      501
2       1        1
3       1        0
4       1        1
5       2      524