[英]Same function over multiple data frames in R - not over a list of data frames
這個問題幾乎就是我想做的事情,除了輸出作為數據幀列表提供的事實。 讓我們重現上面提到的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放在列表中並應用該函數,除非我可以“提取”此列表的每個第三維回到個人數據框架。
謝謝
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
通過對表的引用來操作,因此在函數內部實際上是更新基礎表,而不僅僅是對表的作用域引用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.