r - for 循环在动态数量的数据帧上分配列值

标签 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 中的 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/

相关文章:

html - 在 R 中抓取具有多个选项卡的网页

r - 从R中提取到sqlite数据库:重命名row_name列

r - Shiny - 在输出中使用observe 函数调用的结果

python - 列表列表中的DataFrame

python - 提高加权移动平均线的表现

python - 重新分配 pandas 数据框中的值范围?

r - 根据行值有条件地替换某些列中的 NA

r - 使用 ggplot2 对齐子集数据点

r - 对具有差异的 IF 多个标准求和 - R

python - 如何动态链接 Pyspark 中的条件?