[英]Lapply to all columns in a data.frame except one and replace the data in R
在“天”数据框中,我想将名为“ 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.