将表转换为data.frame

时间:2018-04-07 09:14:03

标签: r dataframe

我知道他们是使用

将表格转换为数据框的其他帖子
as.data.frame.matrix()

我是数据框架;让我们说df1和df2。我想计算数据帧特定列的频率表,然后将结果表合并到data.frame oder矩阵中。

 foo1 <-table(droplevels(df1$h_MAR)) #calculating frequency of a column
 foo2 <-table(droplevels(df2$h_RMSR)) #calculating frequency of a column


foo1
h=24 h=12 h=53 h=21 h=25 h=18 h=29 h=30 h=48 
1    1    2    1    1    1    1    1    1 

foo2
h=23 h=47 h=35 h=52 h=33 h=29 h=24 h=37 h=48 
1    2    1    1    1    1    1    1    1 

我现在尝试将它们转换为data.frames以对它们进行rbind。 A&#34;简单&#34; rbind会给我错误的结果:

rbind(foo1,foo2)
       h=24 h=12 h=53 h=21 h=25 h=18 h=29 h=30 h=48
foo1    1    1    2    1    1    1    1    1    1
foo2    1    2    1    1    1    1    1    1    1

错误:

as.data.frame.matrix(foo1)

Error in seq_len(ncols) : 
 argument must be coercible to non-negative integer

注意:Droplevels用于删除零计数的频率。

您是否有任何想法如何以智能方式合并它们而不丢失信息?对我来说很重要的是,结果存在于数据框中以供进一步计算。

这里是foo1和foo2的输入:

dput(foo1)

structure(c(1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L), .Dim = 9L, .Dimnames =     structure(list(
c("h=24", "h=12", "h=53", "h=21", "h=25", "h=18", "h=29", 
"h=30", "h=48")), .Names = ""), class = "table")

dput(foo2)

structure(c(1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Dim = 9L, .Dimnames = structure(list(
c("h=23", "h=47", "h=35", "h=52", "h=33", "h=29", "h=24", 
"h=37", "h=48")), .Names = ""), class = "table")

2 个答案:

答案 0 :(得分:1)

以下可能会做你想做的事 我相信可以将下面的代码概括为任何其他行数,但您只需要两个,foo1foo2,所以就这样了。

all <- unique(c(names(foo1), names(foo2)))
result <- as.data.frame(matrix(NA, ncol = length(all)))
names(result) <- all
result[nrow(result), names(foo1)] <- foo1
result <- rbind(result, rep(NA, length(all)))
result[nrow(result), names(foo2)] <- foo2

result
#  h=24 h=12 h=53 h=21 h=25 h=18 h=29 h=30 h=48 h=23 h=47 h=35 h=52 h=33 h=37
#1    1    1    2    1    1    1    1    1    1   NA   NA   NA   NA   NA   NA
#2    1   NA   NA   NA   NA   NA    1   NA    1    1    2    1    1    1    1

答案 1 :(得分:0)

这会解决您的问题吗?

library(dplyr)
df1 <- data.frame(foo1)
df2 <- data.frame(foo2)
df12 <- full_join(df1, df2, by = c('Var1' = 'Var1')) %>%
        arrange(Var1)