现在轻微测试:
dat[gsub("av", "main", names(dat))] <-
lapply(dat[grep("av", names(dat))],
function(col) { ifelse (col==5 | col==8 | col==6, 10, 0) } )
SimonO101 提供的数据集比我预期的要简单。这是对我的代码的稍微复杂但仍然相当小的测试(现在我修复了第一个版本中缺少的逗号)和(修复了将行分配给列的逻辑错误):
dat <- data.frame( one=1, two=2, av1 = sample(8) , av2 = sample(8) , av3 = sample(8) );
dat <- cbind(dat, sapply(dat[grep("av", names(dat))],
function(col) { ifelse (col==5 | col==8 | col==6, 10, 0) } ) )
dat
#----------------
one two av1 av2 av3 av1 av2 av3
1 1 2 4 3 4 0 0 0
2 1 2 6 2 5 10 0 10
3 1 2 7 7 8 0 0 10
4 1 2 5 8 1 10 10 0
5 1 2 2 5 6 0 10 10
6 1 2 1 1 7 0 0 0
7 1 2 3 4 3 0 0 0
8 1 2 8 6 2 10 10 0
#--------------
names( dat)[6:8] <- gsub("av", "main", names(dat)[6:8])
dat
#-----------------
one two av1 av2 av3 main1 main2 main3
1 1 2 4 3 4 0 0 0
2 1 2 6 2 5 10 0 10
3 1 2 7 7 8 0 0 10
4 1 2 5 8 1 10 10 0
5 1 2 2 5 6 0 10 10
6 1 2 1 1 7 0 0 0
7 1 2 3 4 3 0 0 0
8 1 2 8 6 2 10 10 0