微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

循环列表以在R中分配名称不起作用

如何解决循环列表以在R中分配名称不起作用

我有一堆行要添加一个更大的数据框,称为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")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。