我想说我想从两个数据帧中选择一些列并将它们组合起来;但是,它们的名称相同。没问题:
mtcars_1 = mtcars
mtcars_2 = mtcars
mt_combined = data.frame(mtcars_1[, 1:3], mtcars_2[, 2:3])
现在,两个数据框中存在的列的名称都是disp.1
,依此类推。我想要的是能够控制附加的字符串,以便得到类似disp.mtcars_2
的内容,甚至更好disp.(somevariabledefinedinfunction)
。
我怎样才能做到这一点?
请注意,在此示例中显然mtcars_1
和_2
是相同的,但可能会出现这种情况的情况,即我有两个数据帧具有相同的观察数但来自不同的日期等等。
答案 0 :(得分:1)
我们可以将setNames
与paste
mt_combined <- data.frame(mtcars[,1:3], setNames(mtcars_2[,2:3],
paste0(names(mtcars)[2:3], ".mtcars_2")))
我们还可以创建一个功能,使用quosures
的devel版本中的dplyr
(即将发布0.6.0
f1 <- function(dat1, dat2, colInd1, colInd2){
str1 <- quo_name(enquo(dat2))
newN <- paste0(names(dat2)[colInd2], ".",str1)
names(dat2)[colInd2] <- newN
dat1 %>%
select(colInd1) %>%
bind_cols(., select(dat2, colInd2))
}
head(f1(mtcars_1, mtcars_2, 1:3, 2:3), 2)
# mpg cyl disp cyl.mtcars_2 disp.mtcars_2
#1 21 6 160 6 160
#2 21 6 160 6 160
此处,enquo
接受输入参数,并从substitute
执行与base R
类似的工作,将其转换为quosure
,quo_name
将其转换为paste
要在Year Quarter Total
Year 2016 Q1 2.688.627.598
Year 2016 Q2 2.114.089.713
Year 2016 Q3 3.064.536.554
Year 2016 Q4 3.451.472.537
答案 1 :(得分:1)
如果在data.frame
中命名data.frame参数,它将在名称前加上,例如
head(data.frame(df1 = mtcars[, 1:3], df2 = mtcars[, 2:3]))
#> df1.mpg df1.cyl df1.disp df2.cyl df2.disp
#> Mazda RX4 21.0 6 160 6 160
#> Mazda RX4 Wag 21.0 6 160 6 160
#> Datsun 710 22.8 4 108 4 108
#> Hornet 4 Drive 21.4 6 258 6 258
#> Hornet Sportabout 18.7 8 360 8 360
#> Valiant 18.1 6 225 6 225
为了更好地控制,请事先直接设置列名称。