我知道他们是使用
将表格转换为数据框的其他帖子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")
答案 0 :(得分:1)
以下可能会做你想做的事
我相信可以将下面的代码概括为任何其他行数,但您只需要两个,foo1
和foo2
,所以就这样了。
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)