R沿数据框列表变异

标签 r dplyr

df<- data_frame(first =seq(1:10), second = seq(1:10))
ldf <- list(df, df, df, df, df)
names(ldf) <- c('alpha', 'bravo', 'charlie', 'delta', 'echo')

我有这个数据帧列表,我正在尝试将 mutate 函数应用于每个数据帧,但我得到一个“与 STRSXP 不兼容”的错误,我对此感到困惑。

这是我的代码,它给了我错误。
for( i in seq_along(ldf)){
 ldf[[i]] <- mutate( ldf[[i]], NewColumn1= ldf[[i]][1]/(ldf[[i]][2] *2),
                               NewColumn2= ldf[[i]][1]/(ldf[[i]][2] * 3))
}

我的意图是 for 循环进入第一个数据帧。它应用 mutate 函数并创建一个名为“NewColumn1”的新列,该列将第一列除以第二列的两倍。它对下一列执行类似的操作。

我是否使用此代码在正确的范围内,或者在循环列表中的 dfs 时我可以不使用 mutate 吗?

最佳答案

您似乎走在正确的轨道上,但是您替换原始列表元素的方式有点错误。虽然有多种方法可以实现这一点,但以下是您开始的领域:

for循环

for (df_name in names(ldf)) {
    ldf[[df_name]] <- mutate(ldf[[df_name]],
           new_col_one=first/(second * 2),
           new_col_two=first/(second * 3))
}

这实际上覆盖了原始列表。

重叠
lapply(ldf, function(x) {
    mutate(x,
           new_col_one=first/(second * 2),
           new_col_two=first/(second * 3))
})

这将创建一个新列表

map
Map(function(x) {
    mutate(x,
           new_col_one=first/(second * 2),
           new_col_two=first/(second * 3))
}, ldf)

这也将创建一个新列表。

您也可以查看 map 来自 purrr包裹。

我希望其中之一能起到作用。

关于R沿数据框列表变异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44742461/

相关文章:

r - csv 中的额外逗号导致问题

R:purrr:使用 pmap 进行逐行操作,但这次涉及很多列

R dplyr 当函数输入是变量时的Quosure逻辑

r - 在 Caret 中安装 bartMachine 获取长度为零的参数/维数不正确

r - 将变量名称列表作为参数传递给 R 函数

报告变量的第一个和最后一个非缺失观察

r - dplyr::left_join 等价于 base::merge(..., all.x=TRUE) 吗?

r - 如何在 data.table 中分组后使用条件计算行数

r - dplyr::过滤器 "No tidyselect variables were registered"

r - 在 R 中的 data.table 中分组,只保留列中的非 NA 值