r - 在 R 中以具有修改名称的先前列的值为条件创建多个新列
问题描述
我有一个如下所示的数据框,但包含更多列和行。
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))
推荐阅读
- raspberry-pi3 - 如何更改 2x16 LCD 显示器的背光颜色
- python - Python对Pandas数据框进行排序会产生随机结果
- sql - 如何通过 SQL 中的某些键删除以区分
- swift - 呈现后无法关闭视图控制器
- typescript - 是否可以在 TypeScript 中的元组解构期间创建一些变量?
- jaxb - 具有多命名空间的 JAXB 解组
- git - 如何在推送后配置 git hook post-recieve 以更新镜像存储库?
- javascript - 提交并保留第一个模式时如何关闭第二个引导模式?
- sql-server - 如何设置正确的交易级别?
- android - 德尔福安卓。如何制作具有全文搜索自动完成支持的组合框?