问题描述
我有一堆行要添加到一个更大的数据框,称为big_false。我想使用for循环。 每行看起来像这样:
new_row1 <- c(402,1,"false alarm",0)
我想为较大的数据框的各列分配新的行名称,因此我遍历列表中的每一行,并为每行分配相同的名称。
rowlist = list(new_row1,new_row2,new_row3,new_row4,new_row5,new_row6,new_row1011,new_row1014,new_row1016,new_row1022,new_row1023,new_row2021,new_row3046)
for (item in rowlist) {
names(item) <- c("guest_id","sessionNum","interactions.hitType","n")
}
然后我遍历每个对象,并将它们添加到已经具有这些列名称的大数据框中。
for (item in rowlist) {
bigger_false <- rbind(bigger_false,item)
}
现在,第一个循环似乎适用于第一行(成功分配了名称)。所以如果我手动做
bigger_false <- rbind(bigger_false,new_row1)
我没有错误。但是,该第一个循环的其余部分未成功为其余行分配名称,因此rbind循环给出了错误:第一次迭代后出现“参数2必须具有名称”。
为什么会这样?预先感谢。
解决方法
item
变量在行列表中循环,但不会修改行列表的内容。
试试:
new_row1 <- c(402,1,"false alarm",0)
new_row2 <- c(403,2,0)
rowlist = list(new_row1,new_row2)
for (item in 1:length(rowlist)) {
names(rowlist[[item]]) <- c("guest_id","sessionNum","interactions.hitType","n")
}
bigger_false <- NULL
for (item in rowlist) {
bigger_false <- rbind( item,bigger_false)
}
bigger_false
guest_id sessionNum interactions.hitType n
item "403" "2" "false alarm" "0"
item "402" "1" "false alarm" "0"
,
您也可以执行以下操作:
# creates a matrix
df <- do.call(rbind,rowlist)
# create a dataframe
df <- data.frame(df)
colnames(df) <- c("guest_id","n")