R 是否可以基于另一个数据帧的内容在一个数据帧中组合列?
我面临着一个可能非常简单的问题,我被卡住了。我有一个数据帧(df1)和第二个数据帧(df2),我想用它作为组合df1列的方法。df2中的列名称应该是最终数据帧的新列名R 是否可以基于另一个数据帧的内容在一个数据帧中组合列?,r,dataframe,dplyr,R,Dataframe,Dplyr,我面临着一个可能非常简单的问题,我被卡住了。我有一个数据帧(df1)和第二个数据帧(df2),我想用它作为组合df1列的方法。df2中的列名称应该是最终数据帧的新列名 df1 <- data.frame( ID = seq(1:5), A = c(10,15,20,90,1), B = c(10,15,5,10,1), C = c(10,15,5,10,1), D = c(1,20,34,12,5), E = c(2,23,34,12,5) ) 我知道,我可以直
df1 <- data.frame(
ID = seq(1:5),
A = c(10,15,20,90,1),
B = c(10,15,5,10,1),
C = c(10,15,5,10,1),
D = c(1,20,34,12,5),
E = c(2,23,34,12,5)
)
我知道,我可以直接使用dplyr mutate函数而不使用df2来实现这一点,但是我的想法是,我可以通过分组文件中的未来更改来自动化这个过程
这是一个示例数据帧
df1 <- data.frame(
ID = seq(1:5),
A = c(10,15,20,90,1),
B = c(10,15,5,10,1),
C = c(10,15,5,10,1),
D = c(1,20,34,12,5),
E = c(2,23,34,12,5)
)
df1这里有一种使用基数R的方法,我们在df2
的每一列上循环,将df1
中的列子集,并取rowSums
得到和
cbind(df1[1], sapply(df2, function(x) rowSums(df1[unique(x)])))
# ID Group_1 Group_2 Group_3
#1 1 20 11 2
#2 2 30 35 23
#3 3 10 54 34
#4 4 20 102 12
#5 5 2 6 5
使用tidyverse
的类似方法如下
library(dplyr)
library(purrr)
bind_cols(df1[1], map_df(df2, ~rowSums(df1[unique(.x)])) )
这是在使用stringsAsFactors=FALSE
读取df2
中的数据之后
df2 <- data.frame (
Group_1 = c("B","C"),
Group_2 = c("D","A"),
Group_3 = ("E"), stringsAsFactors = FALSE)
df2谢谢你,罗纳克。这正是我一直在寻找的,它工作得非常完美。感谢您提供tidiverse和base R解决方案。
df2 <- data.frame (
Group_1 = c("B","C"),
Group_2 = c("D","A"),
Group_3 = ("E"), stringsAsFactors = FALSE)