我有多个数据框(df1,df2,df3,df4等),结构如下:
ID val1 val2
1 1 1
2 1 2
3 NA 3
4 NA 4
5 6 3
6 6 6
我想在val1中使用val2中的值分配NA值,我使用以下命令:
df1$val1[is.na(df$val1)] <- df1$val2[is.na(df1$val1)]
这很好用!
问题:
我不想写多个这样的语句来处理这个问题,因为数据帧的数量很大,比如10
我知道如何动态创建数据框但我不能为此做同样的事情!
启示:
for(i in 1:10){
assign(paste("df", i, sep = ""), subset(df2, count == i))}
P.S:不允许将df合并在一起
答案 0 :(得分:2)
我们可以将数据集放在list
中并执行相同的操作。如果我们需要更改原始对象中的值,请使用list2env
lst <- mget(paste0("df", 1:10))
list2env(lapply(lst, function(x) {i1 <- is.na(x$val1)
x$val1[i1] <- x$val2[i1]
x }), envir = .GlobalEnv)
使用data.table
list2env(lapply(lst, function(x) setDT(x)[is.na(val1), val1:= val2]),
envir = .GlobalEnv)