【问题标题】:Inserting a table object in a data.frame cell在 data.frame 单元格中插入表格对象
【发布时间】:2016-02-07 19:08:11
【问题描述】:

我正在为 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              ...

我不介意表格是否转换为线性字符串,只要它们是可读的。

【问题讨论】:

  • 你也可以发布你想要的输出吗?
  • 这个“有效”:df[1,"tables"] &lt;- list(list(t))
  • 好的,我现在明白了。寻找解决方法。
  • @Frank,都在那里,只是没有打印出来。真的需要解决方法吗?您提供的数据结构将比单个字符串更好(除非您尝试另存为 CSV 或其他东西......)
  • @Frank,那么toString(sprintf("%s (%d)", names(t), t)) 怎么样。

标签: r dataframe


【解决方案1】:

(感谢@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时,表格元素的名称将不可见。

【讨论】:

  • 考虑到 Ananda 的简单得多的 sprintf 方法,这种交错操作可能有点过头了。
  • @AnandaMahto似乎没有。感谢您添加您的答案。我已经编辑将其放在顶部,因为这是最好的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-03
  • 2011-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多