gpt4 book ai didi

r - Lapply to all columns in a data.frame 除了一个并替换R中的数据

转载 作者:行者123 更新时间:2023-12-02 00:41:16 25 4
gpt4 key购买 nike

在数据框“days”中,我想将名为“round.numbers”的函数应用于除名为“id”的列之外的所有列。

根据评论,

days[,-'id'][, lapply(X = .SD, FUN = round.numbers)]这成功了

但是它创建了一个新表而不是替换原始数据。

days[,-'id'] <- days[,-'id'][, lapply(X = .SD, FUN = round.numbers)]失败。

最佳答案

我假设您使用 data.table。然后您可以使用 setdiff,如下例所示:

> days = data.table(a = 1:2, b = 3:4, id = c(1, 1))
>
> days <- days[, lapply(X = .SD, FUN = identity),
+ .SDcols = setdiff(colnames(days), "id")]
> days
a b
1: 1 3
2: 2 4

或者只删除 id 开始

> days = data.table(a = 1:2, b = 3:4, id = c(1, 1))
> days <- days[, id := NULL][, lapply(X = .SD, FUN = identity)]
> days
a b
1: 1 3
2: 2 4

如果你想保留 id 列,那么应该这样做(我在看到你的评论后添加了这个)

> set.seed(23812349)
> days = data.table(a = rnorm(2), b = rnorm(2), id = c(1, 1))
> days
a b id
1: -1.461587 0.2130853 1
2: 1.062314 0.8523587 1
>
> .cols <- setdiff(colnames(days), "id")
> days[, (.cols) := lapply(.SD, round, digits = 1), .SDcols = .cols]
> days
a b id
1: -1.5 0.2 1
2: 1.1 0.9 1

关于r - Lapply to all columns in a data.frame 除了一个并替换R中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46595080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com