首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何选择列中的第一个空单元格?

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

Stack Overflow用户
提问于 2016-02-07 03:02:08
回答 2查看 1K关注 0票数 0

假设我有一个数据

代码语言:javascript
运行
复制
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

我想在DF1的年龄组列中添加来自DF2的数据:

代码语言:javascript
运行
复制
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

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

代码语言:javascript
运行
复制
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行开始,我的数据比第1行要大得多,这就是为什么循环更好的原因。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-07 04:05:25

首先,我假设df1的列不是因素。执行此操作的一个简单方法是使用:

代码语言:javascript
运行
复制
    df1[] <- lapply(df1, as.character)

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

代码语言:javascript
运行
复制
    df2[, 1] <- unlist(rep(df1[1, ], df1[2, ]))

这里,我们告诉rep()重复第一个年龄组"1-5“3次,"6-10”2次等等。rep()的输出将是一个列表,因此unlist()可以用来将一个列表转换为一个向量。

票数 2
EN

Stack Overflow用户

发布于 2016-02-07 04:36:35

我认为斯科特的回答最好。下面是一种显式使用for循环的方法:

代码语言:javascript
运行
复制
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)
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35249210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档