【问题标题】:lapply - assign specific value to other columns in the same row within data.frameslapply - 为 data.frames 中同一行中的其他列分配特定值
【发布时间】:2016-10-19 14:36:55
【问题描述】:

我有一个包含 100 多个数据帧的列表,每个数据帧有 3 列。

这里是 data.frames 之一的示例:

[[6]]
             V1        V2        V3
2         12002                    
9   05 Jan 1974   404.074     2.940
10  12 Jan 1974   477.433     3.235
11  18 Jan 1974   443.135     3.099
12  30 Jan 1974   556.402     3.537
13  22 Nov 1974   534.586     3.455

我想要做的是将第一列的第一行值复制到其他两列中的其他两个第一行值。

我的结果,对于列表中包含的所有 data.frames 应该是:

[[6]]
             V1        V2        V3
2         12002     12002     12002         
9   05 Jan 1974   404.074     2.940
10  12 Jan 1974   477.433     3.235
11  18 Jan 1974   443.135     3.099
12  30 Jan 1974   556.402     3.537
13  22 Nov 1974   534.586     3.455

n.b.每个数据帧要复制的值都不同。

我尝试先为一个 data.frame 执行此操作(不使用 lapply),它确实有效:

list[[1]]$V2[1] = list[[1]]$V1[1]

但是当我尝试使用lapply 函数时,它不再起作用了:

list = lapply(list, function(x) x$V2[1] = x$V1[1])

我的代码有什么问题?

【问题讨论】:

  • 要注意的一件事是不要将您的列表称为“列表”。
  • 谢谢,我会记住这一点的。

标签: r dataframe lapply


【解决方案1】:

你需要在赋值后返回整个df。

list <- lapply(list, function(x) {
    x[1,] <- x$V1[1]
    x
}

【讨论】:

  • 太棒了!我总是忘记归还 df!
【解决方案2】:

同 emilliman5,这里是一个例子

d <- data.frame(x = 1:3, y = 4:6)
l <- list(d, d)
do_this <- function(dat) {
  dat[1,2] <- dat[1,1]
  return(dat)
}
lapply(l, do_this)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-14
    • 1970-01-01
    • 2017-03-03
    • 2019-01-03
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多