我有n个data.frame我想将列添加到所有data.frame
a <- data.frame(1:4,5:8)
b <- data.frame(1:4, 5:8)
test=ls()
for (j in test){
j = cbind(get(j),IssueType=j)
}
我遇到的问题是
j = cbind(get(j),IssueType=j)
因为它会将所有数据分配到j
而不是a
,b
。
答案 0 :(得分:3)
如评论所述,最好将相关数据保存在列表结构中。如果您已在全局环境中拥有data.frames并且希望将它们放入列表中,则可以使用:
dflist <- Filter(is.data.frame, as.list(.GlobalEnv))
这来自here,并确保您只从全局环境中获取data.frame
个对象。
您会注意到您现在已经有了一个命名列表:
> dflist
# $a
# X1.4 X5.8
# 1 1 5
# 2 2 6
# 3 3 7
# 4 4 8
#
# $b
# X1.4 X5.8
# 1 1 5
# 2 2 6
# 3 3 7
# 4 4 8
因此,您可以通过键入
轻松选择所需的数据dflist[["a"]]
如果您仍想创建额外的列,可以这样做:
dflist <- Map(function(df, x) {df$IssueType <- x; df}, dflist, names(dflist))
现在,dflist
中的每个data.frame都有一个名为IssueType
的新列:
> dflist
# $a
# X1.4 X5.8 IssueType
# 1 1 5 a
# 2 2 6 a
# 3 3 7 a
# 4 4 8 a
#
# $b
# X1.4 X5.8 IssueType
# 1 1 5 b
# 2 2 6 b
# 3 3 7 b
# 4 4 8 b
将来,您可以从头开始在列表中创建数据,即
dflist <- list(
a = data.frame(1:4,5:8)
b = data.frame(1:4, 5:8)
)
答案 1 :(得分:0)
要创建data.frames列表,请执行以下操作:
a&lt; - data.frame(1:4,5:8); b&lt; - data.frame(1:4,5:8); test&lt; - list(a,b)
这使您可以使用lapply函数来执行您喜欢的每个数据帧,例如:
out <- lapply(test, function(x) cbind(j))
对于大多数data.frame操作,我建议使用软件包dplyr和tidyr。
答案 2 :(得分:0)
wooo wooo
这是问题的答案 由@docendo discimus帮助
创建数据框
a&lt; - data.frame(1:4,5:8) b&lt; - data.frame(1:4,5:8)
将data.frame分组到列表中
dflist&lt; - 过滤器(is.data.frame,as.list(.GlobalEnv))
添加额外列
dflist&lt; - Map(function(df,x){df $ IssueType&lt; - x; df},dflist,names(dflist))
取消数据框架
list2env(dflist,.GlobalEnv)