【发布时间】:2019-08-25 15:16:11
【问题描述】:
我有创建新数据框 df2 的代码,它是现有数据框 df 的副本,但有四个新列 a、b、c、d。这些列的值由它们自己的函数给出。
下面的代码按预期工作,但似乎重复。有没有更简洁的形式可以推荐?
df2 <- df %>% mutate(a = lapply(df[,c("value")], f_a),
b = lapply(df[,c("value")], f_b),
c = lapply(df[,c("value")], f_c),
d = lapply(df[,c("value")], f_d)
)
“值”列"-0.57(-0.88 to -0.26)" 中的单元格内容示例。
我正在应用一个函数来提取第一个数字:
f_a <- function(x){
substring(x, 1, regexpr("\\(", x)[1] - 1)
}
这适用于单个字符串(示例中的 -0.57)时效果很好。在数据框中,我发现 lapply 根据“值”列中任何单元格的输入给出了正确的值。代码看起来有点重复,但可以工作。
【问题讨论】:
-
请添加功能、当前和预期输出。看看是什么造就了一个很棒的 R 问题here。
-
你是
lapplying 到一栏。不是问题的答案,但很可能与f_a(df[, "value"])等相同。至于问题,可能是?mutate_at。 -
感谢您的建议,这些确实使代码更短。在使用 lapply 之前,我在使用函数创建列时遇到了麻烦。当应用于一个输入值时,它们可以完美地工作,但在所有行中它给出了错误的值。我推断 lapply 将函数分别应用于“值”列中的每个单元格。当我删除 lapply 时,虽然代码更短,但 R 正在做一些我不理解的事情。
标签: r