我有一个如下所示的数据框,但具有更多的列和行。
dog_c cat_c cheese_c hat_c
3 4 3 2
3 1 2 5
5 2 1 4
我想创建一个如下所示的数据框。我想对原始数据帧中给定列中的所有值求平方,然后创建一个与原始列相同但在末尾带有2的列名。然后,我想将其附加到原始数据框。
dog_c cat_c cheese_c hat_c dog_c2 cat_c2 cheese_c2 hat_c2
3 4 3 2 9 16 9 4
3 1 2 5 9 1 2 5
5 2 1 4 25 4 1 16
我知道我可以通过以下方式对每个新列进行此操作。
df$dog_c2 <- (df$dog_c)^2
有人对我如何更有效地做到这一点有建议吗?
您也可以直接对数据框执行相同的操作:
df[paste0(names(df), 2)] <- df^2
df
# dog_c cat_c cheese_c hat_c dog_c2 cat_c2 cheese_c2 hat_c2
#1 3 4 3 2 9 16 9 4
#2 3 1 2 5 9 1 4 25
#3 5 2 1 4 25 4 1 16
如果您想在中执行此操作dplyr
,则可以使用mutate_all
library(dplyr)
df %>% mutate_all(list(`2` = ~. ^2))
如果只想对选定的列执行此操作,则可以执行以下操作:
cols <- c('dog_c','cat_c') #Use regex if there are lot of columns.
df[paste0(cols, 2)] <- df[cols]^2
# dog_c cat_c cheese_c hat_c dog_c2 cat_c2
#1 3 4 3 2 9 16
#2 3 1 2 5 9 1
#3 5 2 1 4 25 4
或mutate_at
与dplyr
df %>% mutate_at(cols, list(`2` = ~.^2))
数据
df <- structure(list(dog_c = c(3L, 3L, 5L), cat_c = c(4L, 1L, 2L),
cheese_c = 3:1, hat_c = c(2L, 5L, 4L)), class = "data.frame",
row.names = c(NA, -3L))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句