首页 > 解决方案 > for循环迭代以在R中创建新列

问题描述

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

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

我想子串列 A 和 B,但不是 C。

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

 for col in select_col {
   newcolA = substr(colA, 1, 3)
   newcolB = substr(colB, 1, 3)
  }

如何正确编写for循环?我的实际数据集有数百列,我有超过 20 列子串。

标签: rloops

解决方案


您可以sapply在列向量(或lapply)上使用:

sapply(data[,select_col], substring, 1, 3)

     A     B    
[1,] "100" "A50"
[2,] "200" "B60"
[3,] "300" "C70"

要更改列并将其存储在同一数据框中:

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

推荐阅读