如何选择列中的第一个空单元格?

时间:2016-02-07 03:02:09

标签: r dataframe

假设我有一个数据框

DF1:
     Y1    Y2     Y3
1   1-5  6-10  11-15    #age-groups
2    3    2      2      #number of people per age-group

DF2:
ID  Age-Group           
 1    NA
 2    NA
 3    NA
 4    NA
 5    NA
 6    NA
 7    NA

我希望在DF2的Age-Group列中添加DF1中的数据:

DF2:
ID  Age-Group
 1    1-5
 2    1-5
 3    1-5
 4    6-10
 5    6-10
 6    11-15
 7    11-15

到目前为止,我有一个循环:

for (i in 1:3)    #number of columns in DF1
{number=DF1[2,i]  #stores the number of times Age-Group 1-5 is repeated (3)
DF2[1:number,2]=DF1[1,i] #attach the 1-5 label to the first 3 cells

此循环适用于应用第一个年龄组1-5,但当我移动到下一个标签时,6-10 ...如何从第4行开始填充2个空单元格?截至目前,循环将始终从第1行开始。我的数据帧远大于此,这就是循环更好的原因。

2 个答案:

答案 0 :(得分:2)

首先我假设df1的列不是因素。一种巧妙的方法是使用:

    df1[] <- lapply(df1, as.character)

您可以使用函数rep()。重要的是要注意rep()接受向量作为它的第一个和第二个参数的输入,因此这里不需要for循环。代替:

    df2[, 1] <- unlist(rep(df1[1, ], df1[2, ]))

在这里,我们告诉rep()重复第一个年龄组&#34; 1-5&#34; 3次,&#34; 6-10&#34; rep()的输出将是一个列表,因此可以使用unlist()进行转换 列表到矢量。

答案 1 :(得分:-1)

我认为斯科特的答案是最好的。这是一种明确使用for循环的方法:

a=data.frame()
for (i in 1:nrow(t(DF1)))
{
   b<-data.frame(AGE=rep(t(DF1)[i,1],(as.numeric(t(DF1)[i,2]))))
   a<-rbind(a,b)
}