r - 为多个数据框和取消列表的列表计算新属性

标签 r list dataframe lapply

我请求你在 R 方面的帮助来解决这个问题。
我有如下所示的数据框

df1

a,b,c,d

1,2,3,4

1,2,3,4

1,2,3,4

df2

a,b,c,d

1,2,3,4

1,2,3,4

1,2,3,4

1,2,3,4

我需要对每个数据帧执行一个操作,如下所示
 df1$value <- 0.12*df1$a+0.24*df1$b+0.56*df1$c

从另一个 Stack Overflow 的答案中读到,建议放入所有数据帧的列表。我试图使用下面的语句来做到这一点。有效
df_list <- list(ls(pattern='df*'))

现在我无法使用 lapply 使用以下代码计算新属性
res <- lapply(dflist, function(x) {
          0.12*grep(x[[a]])+0.24*grep(x[[b]])+0.56*grep(x[[c]]))
          })

执行上述操作后,我想在没有列表的情况下改革我的数据帧。

最佳答案

R ,最好将 data.frames 保存在 list 中.如果我们真的需要更新全局环境中的data.frames对象,使用list2env之后 transform 'df_list' 带有一个 'value' 列。

df_list <- mget(ls(pattern='df\\d+'))
res <- lapply(df_list, transform, value = 0.12*a + 0.24*b + 0.56*c)
list2env(res, envir = .GlobalEnv)
df1
#  a b c d value
#1 1 2 3 4  2.28
#2 1 2 3 4  2.28
#3 1 2 3 4  2.28
 df2
#  a b c d value
#1 1 2 3 4  2.28
#2 1 2 3 4  2.28
#3 1 2 3 4  2.28
#4 1 2 3 4  2.28

我们在 ls(pattern='df\\d+')) 中获得字符串 ( list ) 的值使用 mget ,然后循环遍历 listdata.frame s ( lapply(df_list, ... ), transform在每个 data.frame 中创建一个新列“值”最后用 list2env 更新全局环境中的对象.
数据
df1 <- structure(list(a = c(1L, 1L, 1L), b = c(2L, 2L, 2L), c = c(3L, 
3L, 3L), d = c(4L, 4L, 4L)), .Names = c("a", "b", "c", "d"),
 class = "data.frame", row.names = c(NA, -3L))

df2 <- structure(list(a = c(1L, 1L, 1L, 1L), b = c(2L, 2L, 2L, 2L), 
c = c(3L, 3L, 3L, 3L), d = c(4L, 4L, 4L, 4L)), .Names = c("a", 
"b", "c", "d"), row.names = c(NA, -4L), class = "data.frame")

关于r - 为多个数据框和取消列表的列表计算新属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39928701/

相关文章:

python - 如何向 Plotly Express 条形图添加辅助 Y 轴?

java - R树库+如何运行

r - 如何在 Shiny 的情况下创建 On load 事件或默认事件?

java - 如何使用 Super CSV 将列表写入 CSV

python - 从两个匹配列表中随机选择 [Python]

r - 如何根据特定数字取几行的平均值

python - 将 Python Pandas 数据框行与加法结合起来

r - 如何删除 Knit 输出的 xtable 表中的 % 行

r - 如何退出 R 源脚本

html - IE中列表之间的差距