【发布时间】:2018-04-27 14:58:41
【问题描述】:
我想用从字符串动态分配的列名将列绑定到数据框
y_attribute = "Survived"
cbind(test_data, y_attribute = NA)
这会导致添加一个新列作为 y_attribute 而不是必需的 Survived 属性,该属性作为字符串提供给 y_attribute 变量。需要做什么才能使用变量提供的列名在数据框中获取列?
【问题讨论】:
我想用从字符串动态分配的列名将列绑定到数据框
y_attribute = "Survived"
cbind(test_data, y_attribute = NA)
这会导致添加一个新列作为 y_attribute 而不是必需的 Survived 属性,该属性作为字符串提供给 y_attribute 变量。需要做什么才能使用变量提供的列名在数据框中获取列?
【问题讨论】:
您实际上不需要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)
在现有列之后添加新列,就像cbind。
【讨论】:
rbind(train_data, cbind(test_data, y_attribute = NA))
test_data[, y_attribute] = NA; rbind(train_data, test_data).
rbind(train_data, mutate(.data = test_data,!! y_attribute := NA))
rbind(train_data, {test_data[, y_attribute] = NA}) 的事情来强制它变成一行,但我不推荐它。
我们可以使用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)
【讨论】:
!!?
对此并不感到自豪,但我通常会这样做:
dyn.col <- "XYZ"
cbind(test.data, UNIQUE_NAMEXXX=NA)
colnames(test.data)[colnames(test.data == 'UNIQUE_NAMEXXX')] <- dyn.col
【讨论】:
我们也可以通过data.table来实现
library(data.table)
setDT(test_data)[, (y_attribute) := NA]
【讨论】: