循环以从R中的动态创建的数据框添加列

时间:2018-04-13 21:27:01

标签: r loops dataframe

我是R的新手,我会尽量清楚我的要求。

我有一个名为data_count的数据框,看起来像这样:

A    B    C   D
1    2    3   4
5    6    5   4
3    2    1   2
3    4    5   6
5    4    3   2

首先,我想添加一个特定值出现在连续两行中的次数,我希望逐列完成。为此,我想到了循环遍历data_count以创建2个连续行的数据帧(让我们称之为data_dynamic),我只需要执行count函数。所以这大致是发生的事情:

for (i in 1:(nrow(data_count))){
   limit <- i+1   # this is how I get the two rows
   data_dynamic <- data[i:limit,]  # this is how I get the 2-row dataframe
到目前为止,一切都很好。但现在我想在data_dynamic中计算出数字1,2,3,4,5和6出现的频率。

这样我就可以编写以下数据帧data_count2:

#1    #2    #3    #4    #5    #6
1     1     1     2     2     1
1     2     1     1     2     1
....

第一行告诉你:“在data_count的前两行中,数字1出现一次,而数字4出现两次”。

for (i in 1:(nrow(data_count))){
  limit <- i+1
  data_dynamic <- data[i:limit,]
    for (k in 1:6){
      count_example <- c(count_example,sum(data_dynamic == k))) 
      data_count2[,(k+1)] <- count_example
    }
}

count_example应该是data_count2的一列。

由于某些原因,这不起作用。谁能帮我?我一直在努力奋斗,任何帮助都会非常感激,谢谢!

2 个答案:

答案 0 :(得分:1)

> for (i in 1:(nrow(data_count)-1)) ( print(tabulate(unlist(data_count[i:(i+1),]))))
[1] 1 1 1 2 2 1
[1] 1 2 1 1 2 1
[1] 1 2 2 1 1 1
[1] 0 1 2 2 2 1

或者将其放在数据框中:

> d <- data.frame()
> for (i in 1:(nrow(data_count)-1)) ( d <- rbind(d, 
    (tabulate(unlist(data_count[i:(i+1),])))) )
> names(d) <- c(1,2,3,4,5,6)
> d
  1 2 3 4 5 6
1 1 1 1 2 2 1
2 1 2 1 1 2 1
3 1 2 2 1 1 1
4 0 1 2 2 2 1

答案 1 :(得分:0)

我认为这可能会有所帮助。祝你好运!

items