gpt4 book ai didi

r - 使用 mutate_each 将 R 中的一组行除以 2

转载 作者:行者123 更新时间:2023-12-05 08:34:13 28 4
gpt4 key购买 nike

我有这样一个数据框

Letter   Number1 Number2 Number3 Type
A 4 5 3 10
B 10 22 24 20
C 50 24 100 30
D 60 32 12 40

我想使用 mutate_each 将 number1、number2 和 number3 除以 2,而不对 Letter 和 type 做任何事情。有没有轻松的一天可以做到这一点?

这就是我希望最终的 DF 看起来的样子

Letter   Number1 Number2 Number3 Type
A 2 2.5 1.5 10
B 5 11 12 20
C 25 12 50 30
D 30 16 6 40

谢谢!

最佳答案

我们可以使用 starts_withmatches 选择“Number”列并将这些列除以 2。

library(dplyr)
mutate_each(df1, funs(./2), starts_with('Number'))
# Letter Number1 Number2 Number3 Type
#1 A 2 2.5 1.5 10
#2 B 5 11.0 12.0 20
#3 C 25 12.0 50.0 30
#4 D 30 16.0 6.0 40

正如@Cotton.Rockwood 在评论中建议的那样,在较新版本的 dplyr (0.7.6) 中,我们可以使用 mutate_at (用于更改列的子集)或 mutate_all(用于更改所有列)

df1 %>%
mutate_at(vars(starts_with("Number")), funs(./2))

或者使用data.table,我们将'data.frame'转换为'data.table'(setDT(df1)),得到以开头的列名使用'Number'('nm1'),为'nm1'分配新值即。除以“2”之后。

library(data.table)#v1.9.4+
setDT(df1)
nm1 <- grep('^Number', names(df1), value=TRUE)
df1[, (nm1):= lapply(.SD, `/`, 2), .SDcols=nm1]

或者使用 data.table 的多列更有效的方法是使用 set

for(j in nm1){
set(df1, i=NULL, j=j, value=df1[[j]]/2)
}

数据

 df1 <-  structure(list(Letter = c("A", "B", "C", "D"), Number1 = c(4L, 
10L, 50L, 60L), Number2 = c(5L, 22L, 24L, 32L), Number3 = c(3L,
24L, 100L, 12L), Type = c(10L, 20L, 30L, 40L)), .Names = c("Letter",
"Number1", "Number2", "Number3", "Type"), class = "data.frame",
row.names = c(NA, -4L))

关于r - 使用 mutate_each 将 R 中的一组行除以 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31517886/

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