Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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
for循环迭代以在R中创建新列_R_Loops - Fatal编程技术网

for循环迭代以在R中创建新列

for循环迭代以在R中创建新列,r,loops,R,Loops,我想对一些列进行子串,而不是全部。例如,如果我有一个数据集: ` data <- data.frame(A = c(100, 200, 300), B = c('A50', 'B60', 'C70') c = c(900, 800, 700)) `data您可以对列向量使用sapply(或lapply): 要更改列并将其存储在同一数据帧中,请执行以下操作: cbind(data, setNames(lapply(data[,s

我想对一些列进行子串,而不是全部。例如,如果我有一个数据集:

` data <- data.frame(A = c(100, 200, 300), 
               B = c('A50', 'B60', 'C70')
               c = c(900, 800, 700))

`data您可以对列向量使用
sapply
(或
lapply
):

要更改列并将其存储在同一数据帧中,请执行以下操作:

cbind(data, setNames(lapply(data[,select_col], substring, 1, 3), paste0("new", select_col)))
    A    B   c newA newB
1 100 A501 900  100  A50
2 200 B602 800  200  B60
3 300  C70 700  300  C70

对于新的R用户来说,这可能更直观一些:

data <- data.frame(A = c(100, 200, 300), 
                   B = c('A50', 'B60', 'C70'),
                   c = c(900, 800, 700))

select_col <- c("A", "B")

for(a in select_col) {
  data[[paste0("newcol", a)]] <- substr(data[[a]], 1, 3)
}

数据是否与您的
substr
一致?就像总是
substr(…,1,3)
?谢谢!sapply的结果如何保存为额外列?具体来说,我想在“数据”后面加上“newA”、“newB”。
colnames
函数可以帮助您做到这一点
cbind(data, setNames(lapply(data[,select_col], substring, 1, 3), paste0("new", select_col)))
    A    B   c newA newB
1 100 A501 900  100  A50
2 200 B602 800  200  B60
3 300  C70 700  300  C70
data <- data.frame(A = c(100, 200, 300), 
                   B = c('A50', 'B60', 'C70'),
                   c = c(900, 800, 700))

select_col <- c("A", "B")

for(a in select_col) {
  data[[paste0("newcol", a)]] <- substr(data[[a]], 1, 3)
}
newdata <- data.frame(matrix(nrow = 3, ncol = 0))