【问题标题】:R Combine columns in one dataframe with another while removing old columnsR将一个数据框中的列与另一个数据框中的列合并,同时删除旧列
【发布时间】:2016-11-12 12:59:53
【问题描述】:

我有一个主数据框,我在其中基于旧列创建了新列

我最初为这些列创建了主数据框的子集并执行了一些转换,现在希望将这些列合并回删除过程中的旧列

主数据框中的旧列称为rev_quest_7rev_quest_5,分别包含7列和5列

我从之前的列创建的新列称为updated_7updated_5,包含相同数量的列和数据

所有四个都是数据帧。

mydf_calc <- mydf%>% 
  select(everything(), -rev_quest_7, -rev_quest_5) %>% 
  bind_cols(updated_7, updated_5)

最后,我希望合并来自主数据帧的数据帧updated_7updated_5 主帧rev_quest_7rev_quest_5,创建一个名为mydf_calc 的新数据帧。本题四五项均为数据框

感谢您的帮助

【问题讨论】:

  • rev_quest_7rev_quest_5 数据框还是它们只是来自mydf 的列名或数字的集合?您的问题似乎首先建议后者,然后是前者。
  • 嗨@aichao 所有四个项目都是数据框。本质上,我采用了一部分列,对它们进行了一些工作,并从中创建了 2 个新数据框。由原始子数据帧表示的主数据集中的旧特征现在是多余的。所以我基本上想删除原始数据框中存在的mydf 中的列。我可以手动编码,但子数据框中有很多列,所以我希望能够使用以前的工作来获得优雅的解决方案

标签: r dplyr


【解决方案1】:

一种方法是使用select_ 以编程方式指定要删除的列,使用数据框rev_quest_7rev_quest_5 中的列名:

library(dplyr)
mydf_calc <- mydf %>% select_(.dots=paste0("-",unique(c(colnames(rev_quest_7),colnames(rev_quest_5))))) %>%
                      bind_cols(update_7,update_5)

我将用一个简单的例子来说明rev_quest_7rev_quest_5 只有来自mydf2 列,但这并不重要:

mydf <- data.frame(a=1:3,b=2:4,c=3:5,d=4:6,e=5:7)
##  a b c d e
##1 1 2 3 4 5
##2 2 3 4 5 6
##3 3 4 5 6 7
## rev_quest_7 extracts columns "a" and "c"
rev_quest_7 <- mydf[,c(1,3)]
## rev_quest_5 extracts columns "b" and "d"
rev_quest_5 <- mydf[,c(2,4)]
## update_7 and update_5 operates on rev_quest_7 and rev_quest_5, respectively
update_7 <- 2 * rev_quest_7
##  a  c
##1 2  6
##2 4  8
##3 6 10
update_5 <- 3 * rev_quest_5
##   b  d
##1  6 12
##2  9 15
##3 12 18

mydf_calc <- mydf %>% select_(.dots=paste0("-",unique(c(colnames(rev_quest_7),colnames(rev_quest_5))))) %>%
                      bind_cols(update_7,update_5)
##  e a  c  b  d
##1 5 2  6  6 12
##2 6 4  8  9 15
##3 7 6 10 12 18

【讨论】:

  • 天哪,这非常聪明。非常感谢
猜你喜欢
  • 2021-04-11
  • 1970-01-01
  • 2018-10-28
  • 1970-01-01
  • 2019-07-21
  • 2020-11-13
  • 2019-03-23
  • 1970-01-01
  • 2021-02-03
相关资源
最近更新 更多