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

时间:2019-01-08 12:00:09

标签: 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","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]

   }

基本上,已经是第一部分

h$trtvec[i]<-d$trtvec[i]

似乎无效。 谁能帮我吗?

2 个答案:

答案 0 :(得分:1)

您可以像这样在选定的列名上使用sapply

'Andy':1.2980,'Red':1.1897,'Norton':0.8483, ...

答案 1 :(得分:1)

如果我理解正确,那么您可以执行以下操作。
它使用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

如果要将列rn作为最后一列,请使用cbind.data.frame并更改参数的顺序。

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