我希望基于另一个数据框将一堆变量添加到现有数据框。我正在使用这个问题和答案来设置自己,但它实际上并没有做任何事情。
假设在下面的代码中,我有一个名为 的数据框comp
,我想iris
通过迭代地遍历每一列comp
并通过列中的第一行与该列中的第二行命名该变量来将空变量添加到数据框:
library(tidyverse)
comp <- as_tibble(combn(letters[1:4], 2))
mydf <- as_tibble(iris)
# Creating a function that creates a variable name for each column in comp
# and creates a variable with that name in df
varname_assign <- function(df, n){
varname <- paste0(comp[[1,n]], "Vs", comp[[2,n]])
mutate_(df, .dots= setNames(list(NA), varname))
return(df)
}
for (i in seq_along(comp)) {
mydf <- varname_assign(mydf, i)
}
mydf
# A tibble: 150 × 5
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
<dbl> <dbl> <dbl> <dbl> <fctr>
1 5.1 3.5 1.4 0.2 setosa
#Nothing happened :(
我试图得到这样的东西:
# A tibble: 150 × 11
Sepal.Length Sepal.Width Petal.Length Petal.Width Species AvsB AvsC AvsD BvsC BvsD CvsD
<dbl> <dbl> <dbl> <dbl> <fctr> <lgl> <lgl> <lgl> <lgl> <lgl> <lgl>
1 5.1 3.5 1.4 0.2 setosa NA NA NA NA NA NA
编辑:叹息。return(df)
我刚刚在函数中意识到是罪魁祸首。如果我删除该行,一切正常。不过,不确定这背后的逻辑是什么。