从R中的字符串中cbind动态列名

时间:2018-04-27 14:58:42

标签: r dataframe

我想将列绑定到数据框,并使用从字符串

动态分配的列名称
y_attribute = "Survived"
cbind(test_data, y_attribute = NA)

这会导致新列添加为y_attribute而不是必需的Survived属性,该属性作为y_attribute变量的字符串提供。需要做什么才能使用变量提供的列名来获取数据框中的列?

4 个答案:

答案 0 :(得分:5)

您实际上并不需要import org.apache.spark.sql.functions._ val df = Seq( (1, 3, 0, 9, "a", "b", "c") ).toDF("col1", "col2", "col3", "col4", "col5", "col6", "Col7") val cols = Seq("col1", "col2", "col3", "col4") val rowMax = greatest( cols map col: _* ).alias("max") val rowMin = least( cols map col: _* ).alias("min") df.select($"*", rowMin, rowMax).show // +----+----+----+----+----+----+----+---+---+ // |col1|col2|col3|col4|col5|col6|Col7|min|max| // +----+----+----+----+----+----+----+---+---+ // | 1| 3| 0| 9| a| b| c|0.0|9.0| // +----+----+----+----+----+----+----+---+---+ 来添加新列。其中任何一个都可行:

cbind

在现有列之后添加新列,就像test_data[, y_attribute] = NA # data frame row,column syntax test_data[y_attribute] = NA # list syntax (would work for multiple columns at once) test_data[[y_attribute]] = NA # list single item syntax (single column only)

一样

答案 1 :(得分:3)

我们可以使用tidyverse来执行此操作

library(dplyr)
test_data %>%
     mutate(!! y_attribute := NA)
#   col1 Survived
#1    1       NA
#2    2       NA
#3    3       NA
#4    4       NA
#5    5       NA

数据

test_data <- data.frame(col1 = 1:5)

答案 2 :(得分:0)

对此不感到骄傲,但我通常会做这样的事情:

dyn.col <- "XYZ"
cbind(test.data, UNIQUE_NAMEXXX=NA)
colnames(test.data)[colnames(test.data == 'UNIQUE_NAMEXXX')] <- dyn.col

答案 3 :(得分:0)

我们也可以使用-nts-

data.table