我正在为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 ...
我不介意表是否只是可读的线性字符串转换。
答案 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
时,表格元素的名称将不可见。