我想遍历与数据帧的列相对应的字符串索引(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]
似乎无效。 谁能帮我吗?
答案 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