如何在R中同时循环一个字符串向量和另一个数字向量?

如何在R中同时循环一个字符串向量和另一个数字向量?,r,for-loop,indexing,R,For Loop,Indexing,我想循环一个字符串索引,该索引对应于数据帧(d)的列,以将这些列放入新的数据帧(h)。但不是复制列的内容,而是为每列添加一个不同的数字。这些数字在向量numvec中指定。以下是我的示例代码: d<-data.frame(replicate(5,sample(0:9,300,rep=TRUE))) d$rn<-replicate(1,"mystring") h<-as.data.frame(d[,6]) colnames(d)<-c("first",

我想循环一个字符串索引,该索引对应于数据帧(d)的列,以将这些列放入新的数据帧(h)。但不是复制列的内容,而是为每列添加一个不同的数字。这些数字在向量numvec中指定。以下是我的示例代码:

   d<-data.frame(replicate(5,sample(0:9,300,rep=TRUE)))
   d$rn<-replicate(1,"mystring")
   h<-as.data.frame(d[,6])
   colnames(d)<-c("first","second","third","fourth","fifth")
   trtvec<-colnames(d)
   numvec<-c(2,8,7,6,5)

   #loop for each trait
   for(i in seq_along(trtvec))
   {
       h$trtvec[i]<-d$trtvec[i]+numvec[i]

   }

d您可以对所选列名使用sapply,如下所示

data <- data.frame(a = rep(0, 100) b = rep(1, 100), c = rep(2, 100))

# using a named vector to simplify indexing
num.vec <- c(a = 2, b = 3)

# add the corresponding number to selected columns
new.data <- sapply(names(num.vec), FUN = function(x) data[,x] + num.vec[x])

head(new.data, 1)

     a  b
[1,] 2  4

数据如果我理解正确,以下内容就是您想要的。
它使用
apply
循环将
numvec
添加到数据帧
d
行的每5个元素

h <- d[6]
numvec <- c(2, 8, 7, 6, 5)

h1 <- cbind(h, t(apply(d[1:5], 1, '+', numvec)))
head(h1)
#        rn first second third fourth fifth
#1 mystring     3     11     9     12    11
#2 mystring     8     17     8     10     8
#3 mystring     8     13     8     15    12
#4 mystring     8     12    12     10     7
#5 mystring    10     17    11     15     5
#6 mystring     8     12    10      6    14

replicate(1,“mystring”)
至少很奇怪,你复制了一次?而且,没有
h$trtvec
d$trtvec
这样的东西。你想做什么?是的,只是为了有一个我可以复制的专栏。在我的真实数据帧中,它们可能不同,但我不知道如何在该列中使用不同的字符串。
trtvec
是一个字符向量,不能添加数字和字符。是否要
粘贴(trtvec,numvec)
?使用trtvec,我希望迭代列,并将列的内容复制到h,在内容的每个值中添加相应的numvec数
h <- d[6]
numvec <- c(2, 8, 7, 6, 5)

h1 <- cbind(h, t(apply(d[1:5], 1, '+', numvec)))
head(h1)
#        rn first second third fourth fifth
#1 mystring     3     11     9     12    11
#2 mystring     8     17     8     10     8
#3 mystring     8     13     8     15    12
#4 mystring     8     12    12     10     7
#5 mystring    10     17    11     15     5
#6 mystring     8     12    10      6    14
h2 <- cbind.data.frame(t(apply(d[1:5], 1, '+', numvec)), h)
head(h2)
#  first second third fourth fifth       rn
#1     3     11     9     12    11 mystring
#2     8     17     8     10     8 mystring
#3     8     13     8     15    12 mystring
#4     8     12    12     10     7 mystring
#5    10     17    11     15     5 mystring
#6     8     12    10      6    14 mystring