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))