我在R中有一个data.frame,并希望以特定方式填充一些空单元格。下面是表格。
Case.ID | Resource
-----------------------
1 | 501
-----------------------
1 |
-----------------------
1 | 0
-----------------------
1 |
-----------------------
2 | 524
-----------------------
在这里,我想将空单元格替换为每个Case.ID的第一个值,在这种情况下,将Case.ID = 1的空单元格替换为501而不是0。
答案 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