r - 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 列子串。
解决方案
您可以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
推荐阅读
- c - golang rand() 是否使用 libc rand()
- javascript - javascript的对象对象结果
- sql - SQL Server 中的计算字段
- perl - 使用 perl 脚本提取基本更改
- laravel - 如何在视图中打印数组对象数组的数据
- c# - 是否有类似 RequestLocal(如 ThreadLocal)的东西?
- algorithm - 给定一个字符串列表,打印字符串的所有组合,从每个组合中选择 1 个字符
- matlab - Matlab中的parfor:parfor中的变量无法分类
- r - R中的函数内的“错误:找不到函数”
- java - 库不能设置实施版本,而不指定其规范版本(Weblogic)