![](/img/trans.png)
[英]How do I extract appearances of a vector of strings in another vector of strings using 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.