【问题标题】:how to put many rows in a dataframe by looping in r如何通过在r中循环将多行放入数据框中
【发布时间】:2015-06-28 03:02:12
【问题描述】:

例如,我从列表 ["A", "B","C"] 循环, 我将运行一个 for 循环 要获得 v

最后,我想得到一个格式为

的数据框
"A" v1
"B" v2
"C" v3

如何得到这个输出?谢谢!

【问题讨论】:

  • 如果你说列表,它是什么?一个向量,一个带有一列的数据框,还是一个真实的列表?而 v#,它们是其他东西的占位符还是只是文字 v 加一个数字?它们有多少,它们来自哪里?

标签: r loops


【解决方案1】:

我可能误解了请求,但以下是您要查找的内容吗?

input <- c("A", "B", "C")
data.frame(x=input, y=paste0("v", seq_along(input)))
#   x  y
# 1 A v1
# 2 B v2
# 3 C v3

请注意,您在问题中提到的方法(迭代地构建一行并通过rbind 与现有数据组合)是一个坏主意,因为它需要更多的输入(请注意,我可以在一行)并且还因为它效率低下(您可以在R inferno 的第二个圆圈中阅读更多信息)。

【讨论】:

  • 这是一个很好的方法。但是,我的列表中有许多无法手动输入的元素。我认为 for 循环中的 rbind 会起作用。谢谢
  • @cppython "input" 也可以是一个列表。即input &lt;- list("A", "B", "C"); data.frame(x=unlist(input), y=paste0("v", seq_along(input)))。 for 循环说 R 带有 C 口音。
  • @cppython 您现在如何存储数据?只要将其存储在变量中,将其添加到数据框中应该不难。
【解决方案2】:

我一直坚持的部分是,我必须从一个空的数据框开始

df <-data.frame() 
for (e in mylist){
   v <- function(e) #get the value our from e by a function
   one_row<- cbind(e, v) #cbind e, and v corresponding to e 
   new_f <-data.frame(one_row)                 
   output <-rbind(output,new_f)
}

最后,我得到了正确的输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-26
    • 1970-01-01
    相关资源
    最近更新 更多