for循环为动态数据帧分配列值

时间:2017-01-05 07:06:29

标签: r dataframe

我有多个数据框(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合并在一起

1 个答案:

答案 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)