【问题标题】:For Loop to Extract Vector Objects from Dataframe Column HeadersFor循环从数据框列标题中提取向量对象
【发布时间】:2018-01-22 19:12:00
【问题描述】:

我有一个包含 50 列的数据框 df,我想为每个列名生成向量对象,其中包含数据框行的长度。

我的代码抛出一个错误:

for i in ((1:ncol(df)) {
  colnames(df)[i] <- vector(mode = "list", length = nrow(df))
  return (colnames(df)[i])
}

错误:

for i in ((1:ncol(df)) { 错误:“for i”中出现意外符号 colnames(df)[i] 找不到对象“我” 返回(colnames(df)[i])错误:找不到对象'i' } 错误:“}”中出现意外的“}”

附:我的数据框中的某些列是嵌套列表,以防万一这会影响操作。

【问题讨论】:

  • 能否请您举一个您的df 的示例?,不清楚您想要实现什么?
  • 输出应该是什么样子的?

标签: r for-loop


【解决方案1】:

for(i in (1:ncol(df)))

【讨论】:

  • 哦,感谢您了解这一点。我纠正了它,但这是新的错误:
  • > for i in ((1:ncol(df))) { 错误:"for i" > colnames(df)[i] return (colnames(df)[i]) 错误:没有要返回的函数,跳转到顶层 > } 错误:“}”中的意外'}'
  • @Susie 是说您创建的向量与原始向量的长度不同,这是一个警告,不会关闭您的程序。其次,以这种方式格式化 ------ for (i in (1:ncol(df))) { colnames(df)[i]
【解决方案2】:
for (i in 1:ncol(df)) {
  colnames(df)[i] <- vector(mode = "list", length = nrow(df))
  return (colnames(df)[i])
}

我猜你想要每列中的条目数。通常,在数据框中,每一列都有相同的行数。但是你有列表列,所以你想计算它们有多长,未嵌套?

lapply(df, function(x) length(c(x, recursive=TRUE) ) )

【讨论】:

  • 非常感谢。我收到此警告:警告消息:在 colnames(df)[i]
【解决方案3】:

做出与@Alex P 相同的假设并说比他的lapply 解决方案总是比R 中的for 循环更有效。如果您仍想使用for 循环,这是一个选项:

df <- data.frame(a=1:3)
df$b <- list(1:1, 1:2, 1:3)

l<-list(NULL)
for (i in colnames(df)){
    p <- length(unlist(df[,i]))
    l[[i]] = p
}

【讨论】:

    猜你喜欢
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2021-07-23
    • 1970-01-01
    相关资源
    最近更新 更多