如何在R中同时循环一个字符串向量和另一个数字向量?
我想循环一个字符串索引,该索引对应于数据帧(d)的列,以将这些列放入新的数据帧(h)。但不是复制列的内容,而是为每列添加一个不同的数字。这些数字在向量numvec中指定。以下是我的示例代码:如何在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<-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