R - rapply函数跨列表

时间:2018-02-24 04:21:29

标签: r apply lapply gsub

我有一个包含多个数据帧的列表。每个数据框包含相同的列。我想对列表中所有数据框的特定列进行更改。 但是,我似乎无法弄清楚如何调用单个列。

df1 <- data.frame("col1"=c("foo-1", "foo-1", "bar-7"), "col2" = c("blu-e", "gre-en", "blue"))
df2 <- data.frame("col1"=c("bar", "bar", "foo-2", "foo"), "col2" = c("green", "orang-e", "yell-ow", "pink"))
dflist <- list(df1, df2)


>df1
col1    col2
foo-1   blu-e
foo-1   gre-en
bar-7   blue

>df2
col1    col2
bar     green
bar     orang-e
foo-2   yell-ow
foo     pink

我想替换-df1中的df2,但仅限于col2

示例:

>df1
col1    col2
foo-1   blue
foo-1   green
bar-7   blue

>df2
col1    col2
bar     green
bar     orange
foo-2   yellow
foo     pink

我已经尝试过这段代码(我从两个相关的SO问题(12)进行了调整:

newdf <- rapply(dflist, function(x) gsub(pattern="\\-", "", x, `[[`, "col2"), how="list")

gsubs col1col2。例如:

>df1
col1   col2
foo1   blue
foo1   green
bar7   blue

>df2
col1    col2
bar     green
bar     orange
foo2    yellow
foo     pink

如何仅引用一列?我还是apply家族的新手,所以如果需要一个不同的功能让我也知道。

修改 ANSWER在@alistaire的评论中提供

  拉普利很复杂,但你真的不需要它;只是lapply会   do:lapply(dflist,function(x){x $ col2&lt; - gsub(&#39; - &#39;,&#39;&#39;,x $ col2); x}) -   alistaire 2月24日4:35

1 个答案:

答案 0 :(得分:1)

改为使用lapply:

lapply(dflist, transform, col2 = gsub("-", "", col2))