我有大约40个具有相同结构的数据帧(df1,df2,df3等),每个数据帧有25列。 我可以运行摘要(df1),摘要(df2)等。 摘要包括几个列,我对摘要的这一列感兴趣:
对于df1,它是
stage
stage1 :2222
stage2 :1212
stage3 :8898
对于df2,它是
stage
stage1 :2334
stage2 :9887
stage3 :2344
对于df3,它是
stage
stage1 :5334
stage2 :4887
stage3 :344
等
我想创建一个新的df:
df1 df2 df3 ...
stage1 2222 2334 5334 ...
stage2 1212 9887 4887 ...
stage3 8898 2344 344 ...
谢谢!
答案 0 :(得分:0)
您的数据框中的列stage
似乎是一个包含3个级别的因素:stage1
,stage2
,stage3
。我无法确定,因为您没有提供可重复的示例,但如果是这样的话:
假设你有数据帧
df <- data.frame(stage = as.factor(c('stage1', 'stage2', 'stage1', 'stage3', 'stage2', 'stage2')))
df2 <- data.frame(stage = as.factor(c('stage3', 'stage2', 'stage3', 'stage3', 'stage2', 'stage1')))
您可以使用summary()
summary(df$stage)
#stage1 stage2 stage3
# 2 3 1
使用rbind()
合并结果,您可以在一个数据框中出现阶段。
dfstages <- as.data.frame(rbind(summary(df$stage), summary(df2$stage)))
# stage1 stage2 stage3
#1 2 3 1
#2 1 2 3
答案 1 :(得分:0)
通过将数据帧名称添加到每个帧并使用summary()
,可以避免必须通过table()
处理数据帧中的所有变量,以获得一列的频率计数。
以下是使用table()
的另一种方法,包括数据框名称
生成样本数据后,我们将数据帧分配给列表以添加数据帧名称列,然后使用stage
计算频率。通过在表中包含数据框名称作为第二维,我们获得了所需的输出:具有#
# create example data
df1 <-data.frame(stage =c(rep("stage1",2222),
rep("stage2",1212),
rep("stage3",8898)))
df2 <-data.frame(stage =c(rep("stage1",2334),
rep("stage2",9887),
rep("stage3",2344)))
df3 <-data.frame(stage =c(rep("stage1",5334),
rep("stage2",4887),
rep("stage3",344)))
theList <- list(df1=df1,df2=df2,df3=df3)
# add data frame name as column in each data frame
for(i in 1:length(theList)) {
theList[[i]]$dfname <- names(theList[i])
}
# rbind to one data frame before generating frequencies
theData <- do.call(rbind,theList)
table(theData$stage , theData$dfname)
变量值的行,具有数据框名称的列。
> table(theData$stage , theData$dfname)
df1 df2 df3
stage1 2222 2334 5334
stage2 1212 9887 4887
stage3 8898 2344 344
>
...和输出:
select s1.student_id
, s1.student_fname
, s1.student_lname
, c.course
from course c
join student2 s2 on s2.course_id = c.course_id
join student1 s1 on s1.student_id = s2.student_id
where c.location = 'Burwood';