我有多个名为(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 中的 NA 值分配给 val2 中的值,我使用以下方法来执行此操作:
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 合并在一起
最佳答案
我们可以将数据集放入列表
中并执行相同的操作。如果我们需要更改原始对象中的值,请用 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)
关于r - for 循环在动态数量的数据帧上分配列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41479086/