我希望根据另一个数据框将一堆变量添加到现有数据框中。我正在使用这个question and answer来设置自己,但它实际上并没有做任何事情。
让我们说在下面的代码中我有一个名为comp
的数据框,我希望通过迭代遍历iris
中的每一列并将其命名为数据框comp
空变量变量由“vs”列中的第一行变为该列中的第二行:
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)
是罪魁祸首。如果我删除该行,则一切正常。但不确定这背后的逻辑是什么。