在data.frame单元格中插入表对象

时间:2015-11-06 15:27:52

标签: r dataframe

我正在为data.frame df的每一行计算一个表。 我想将这些表分配为我的数据库的新列的值(以便每行分配一个表)。 但是尝试将表放入data.frame只会导致使用表的第一个值。

df <- data.frame(values = c("row 1","row 2", "row 3"))

v_row_1 <- c("one", "one", "two", "three", "three")
t_row_1 <- table(v_row_1)

df[1, "tables"] <- t_row_1

Warning message:
In `[<-.data.frame`(`*tmp*`, 1, value = list(values = c(1, 2, 3),  :
provided 2 variables to replace 1 variables

我认为一种解决方案是将我的表t转换为字符串对象,然后将此对象分配到我的数据帧中的单元格。但如果我使用paste(toString(t))来执行此操作,我会丢失表名(我仍然无法将此内容放入data.frame单元格中)。

我渴望的输出看起来很像:

values             tables
row 1              one 2 three 2 two 1
row 2              ...
row 3              ...

我不介意表是否只是可读的线性字符串转换。

1 个答案:

答案 0 :(得分:2)

(感谢@AnandaMahto)您可以使用

df[1, "tables"] <- toString(sprintf("%s (%d)", names(t), t))

#   values              tables
# 1      1 one 2 three 2 two 1
# 2      2                  NA
# 3      3                  NA

这是另一种获取字符串结果的方法,borrowed from @Arun用于交错列表的技巧:

df[1, "tables"] <- 
  paste( c(names(t), t)[order(c(seq_along(t), seq_along(t)))], collapse = " " )

评论

t是矩阵转置函数,因此如果重复使用它可能会让人感到困惑。

如果要存储完整的表对象,可以执行

df[1,"tables"] <- list(list(t))

缺点是,在查看df时,表格元素的名称将不可见。