r - 为什么 mapply 不能按预期使用转换?

标签 r list dataframe dictionary

我发了一个 answer使用 dplyr 回答问题和 tidyr .基于 this comment我用过 Map建立答案。
接下来我尝试使用 base R工具仅用于回答相同的问题,但这并没有按预期工作:

transform(
  df,
  Begin_New = Map(seq, Begin, End - 6000, list(by = 1000)) # or mapply(...)
)
导致错误:

Error in (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE, : Arguments imply different number of rows: 25, 33, 84, 36, 85, 165


哦,那好吧。这似乎不起作用,但是 为什么这个有效?
df2 <- data.frame(id = 1:4, nested = c("a, b, f", "c, d", "e", "e, f"))
transform(df2, nested = strsplit(nested, ", "))
据我了解 Map(seq, Begin, End - 6000, list(by = 1000))strsplit(nested, ", ")两者都返回 list()包含向量。我错过了什么?
我读了这个问题 Error in (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE, : Arguments imply different number of rows: 1, 4, 5, 2但我仍然不知道,为什么这两个例子表现不同。
数据
df <- structure(list(ID = c("A01", "A01", "A01", "A01", "A01", "A01"
), Period = c("Baseline", "Run", "Recovery", "Baseline", "Run", 
"Recovery"), Begin = c(0, 30500, 68500, 2000, 45000, 135000), 
    End = c(30500, 68500, 158000, 43000, 135000, 305000)), row.names = c(NA, 
-6L), class = "data.frame")

最佳答案

我认为它与Create a data.frame where a column is a list有关.所以使用 I禁止解释/转换对象。

transform(
  df,
  Begin_New = I(Map(seq, Begin, End - 6000, list(by = 1000)))
)
另一种方法是使用 list2DF喜欢。
transform(
  df,
  unusedName = list2DF(list(Begin_New = Map(seq, Begin, End - 6000,
                 list(by = 1000))))
)
正如@r2evans 已经指出的那样。在第一种情况下,您创建一个新列,在第二种情况下,您覆盖现有的列。

关于r - 为什么 mapply 不能按预期使用转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69013559/

相关文章:

r - 如何将带有字符串和空格的数据拆分为列?

python - 在 Python 中,如何用另一个列表索引一个列表?

python-3.x - 使用另一列中的预定义类别,根据其中存在的文本词对 'string' 列进行分类

python - 将 tfidf 附加到 pandas 数据框

r - 访问插入符号中 rfe 生成的所有模型

r - 如何从 R 中的向量列表创建矩阵?

r - NA 值的 ggplot 排序顺序处理

python - 由函数创建的多个列表输出,我如何将其放入数据帧?

python - 从列表中获取每三个元素

python - 反转 DataFrame 列顺序