Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R data.table:如何使用字符串中的名称创建新列?_R_Data.table - Fatal编程技术网

R data.table:如何使用字符串中的名称创建新列?

R data.table:如何使用字符串中的名称创建新列?,r,data.table,R,Data.table,我有一个字符串向量,需要在data.table中为每个字符串创建一个新列。像这样: dt <- data.table(a = c(1,2,3), b = c(4,5,6)) column_names <- c("x", "y", "z") 这将导致如下结果: for (column_name in column_names) { dt[, column_name := paste0(column_name, a, b)] } a | b | x | y | z

我有一个字符串向量,需要在data.table中为每个字符串创建一个新列。像这样:

dt <- data.table(a = c(1,2,3), b = c(4,5,6))
column_names <- c("x", "y", "z")
这将导致如下结果:

for (column_name in column_names) {
    dt[, column_name := paste0(column_name, a, b)]
}
a | b |   x |   y |   z
-----------------------
1 | 4 | x14 | y14 | z14
2 | 5 | x25 | y25 | z25
3 | 6 | x36 | y36 | z36

但是,它尝试创建名为“column_name”的列3次。如何解决这个问题?

尝试将
列名称
括在括号中。例如:

mtcars <- as.data.table(mtcars)

for (col in names(mtcars)) {
mtcars[, (col) := 1]
}

mtcars尝试将
column\u name
括在括号中。例如:

mtcars <- as.data.table(mtcars)

for (col in names(mtcars)) {
mtcars[, (col) := 1]
}

mtcars这里有一种快速而肮脏的方法:

代码

library(data.table)
dt <- as.data.table(mtcars)
col_names <- c("col1", "col2", "col3")
for(i in 1:length(col_names)){
  dt[, paste(col_names[i]) := i]
}

我相信有更优雅的方式来做这件事

这里有一个快速而肮脏的方法:

代码

library(data.table)
dt <- as.data.table(mtcars)
col_names <- c("col1", "col2", "col3")
for(i in 1:length(col_names)){
  dt[, paste(col_names[i]) := i]
}

我相信有更优雅的方式来做这件事

您可能希望使用
.SD
而不是循环。 将
log
替换为要应用于列的任何函数

mtcars <- as.data.table(mtcars)
columnstolog <- c('mpg', 'cyl', 'disp', 'hp')

mtcars[, (columnstolog) := lapply(.SD, log), .SDcols = columnstolog]

mtcars您可能希望使用
.SD
而不是循环。 将
log
替换为要应用于列的任何函数

mtcars <- as.data.table(mtcars)
columnstolog <- c('mpg', 'cyl', 'disp', 'hp')

mtcars[, (columnstolog) := lapply(.SD, log), .SDcols = columnstolog]

mtcars如果您提供的是样本输入而不是伪代码,那么帮助和测试可能的解决方案就会容易得多。如果您提供的是样本输入而不是伪代码,那么帮助和测试可能的解决方案就会容易得多。