【问题标题】:for loop to assign column values on dynamic number of data framesfor循环在动态数据帧数上分配列值
【发布时间】:2017-01-05 07:06:29
【问题描述】:

我有多个名为(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

我想用 val2 中的值分配 val1 中的 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:不允许合并dfs

【问题讨论】:

  • @RonakShah:抱歉,我的意思是分配

标签: r dataframe


【解决方案1】:

我们可以将数据集放在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)

【讨论】:

  • 这两种方法我都累了,data.table方法肯定更容易理解,非常感谢
  • @akrun 谢谢list2env() 我在工作中需要这个功能!太棒了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多