This Issue几乎就是我想做的事情,除了输出作为数据帧列表提供的事实。让我们重现上面提到的SE问题的例子。
假设我有2个数据框:
df1
ID col1 col2
x 0 10
y 10 20
z 20 30
df1
ID col1 col2
a 0 10
b 10 20
c 20 30
我想要的是带有ifelse结果的第4列。我的理由是:
如果任何data.frame中col1> = 20,我可以使用模式“df”命名,则新列res = 1,否则res = 0。
但是我想在每个data.frame中创建一个具有相同名称模式的新列,而不是将所有这些data.frame放在列表中并应用该函数,除非我可以“提取”每个第三维列出回个别数据框。
由于
答案 0 :(得分:3)
Per @Frank ...如果我对你要找的内容的理解是正确的,请考虑使用data.table
。 MWE:
library(data.table);
addcol <- function(x) x[,res:=ifelse(col1>=20,1,0)]
df1 <- data.table(ID=c("x","y","z"),col1=c(0,10,20),col2=c(10,20,30))
df2 <- data.table(ID=c("x","y","z"),col1=c(20,10,20),col2=c(10,20,30))
#modified df2 so you can see different effects
lapply(list(df1,df2),addcol)
> df1
ID col1 col2 res
1: x 0 10 0
2: y 10 20 0
3: z 20 30 1
> df2
ID col1 col2 res
1: x 20 10 1
2: y 10 20 0
3: z 20 30 1
这是有效的,因为data.table
通过引用对表进行操作,因此在函数内部实际更新基础表,而不仅仅是对表的作用域引用。