簡體   English   中英

如何在R中同時遍歷一個字符串向量和另一個數字向量?

[英]How do I loop over a vector of strings and another vector of numbers at the same time in R?

我想遍歷與數據幀的列相對應的字符串索引(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]

似乎不起作用。 誰能幫我?

您可以像這樣在選定的列名稱上使用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

如果要將列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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM