R中多个数据帧的相同功能 - 不在数据帧列表中

时间:2016-04-04 19:31:18

标签: r data-manipulation

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放在列表中并应用该函数,除非我可以“提取”每个第三维列出回个别数据框。

由于

1 个答案:

答案 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通过引用对表进行操作,因此在函数内部实际更新基础表,而不仅仅是对表的作用域引用。