【问题标题】:Update data.frame in R在 R 中更新 data.frame
【发布时间】:2013-02-09 12:55:07
【问题描述】:

一个data.frame“df”

   st1 st2 st3 st4 st5
1  0   0   0   0   0
2  0   0   0   0   0
3  0   0   0   0   0
4  0   0   0   0   0
5  0   0   0   0   0
6  0   0   0   0   0

将根据向量进行更新。向量是从某个函数调用返回的,每次它可能包含不同数量的列,但向量列始终存在于 data.frame "df" 中。

for (i in 1:10)
{
  x<-funcall()
  print(x)
  #           time.chosen
  #st3        2
  #st5        4
  // Update data.frame "df"
}

有什么简单的方法可以在 R 中进行这种更新吗?

更新: 让我们假设,对于 for 循环的第一次迭代,x 是

           time.chosen
st3        2
st5        4

那么 data.frame df 应该如下所示

  st1 st2 st3 st4 st5
1  0   0   2   0   4
2  0   0   0   0   0
3  0   0   0   0   0
4  0   0   0   0   0
5  0   0   0   0   0
6  0   0   0   0   0

循环的每次迭代对应data.frame df中的一行。

【问题讨论】:

  • for 循环中的每次迭代 i 是否对应数据框中的一行?您能否根据您提供的结果提供一个示例,说明您希望更新后的数据框是什么样的?
  • 你能举一个具体的例子来说明你需要什么吗?列是否预先存在于 df 中?
  • 我已经编辑了我的问题。

标签: r


【解决方案1】:

这样的东西应该可以工作:

      df[iter,rownames(vector)] <- vector$time.chosen

这里我假设向量是这样的data.frame:

这里是一个例子:

vector = data.frame(time.chosen= c(1,2))
rownames(vector) <- paste('t',c(2,3),sep='')
  time.chosen
t2           1
t3           2

df <- as.data.frame(diag(5)*0)
colnames(df) <- paste('t',c(1:5),sep='')


iter <- 1
df[iter,rownames(vector)] <- vector$time.chosen

t1 t2 t3 t4 t5
1  0  1  2  0  0
2  0  0  0  0  0
3  0  0  0  0  0
4  0  0  0  0  0
5  0  0  0  0  0

 iter <-4
 df[iter,rownames(vector)] <- vector$time.chosen

 t1 t2 t3 t4 t5
1  0  1  2  0  0
2  0  0  0  0  0
3  0  0  0  0  0
4  0  1  2  0  0
5  0  0  0  0  0

【讨论】:

    猜你喜欢
    • 2017-09-16
    • 1970-01-01
    • 2020-01-24
    • 1970-01-01
    • 2020-01-05
    • 2012-09-07
    • 2014-12-15
    • 2020-12-16
    相关资源
    最近更新 更多