R沿着数据帧列表进行变异 df
您似乎在正确的轨道上,但是您替换原始列表中的元素的方式有点错误。虽然有多种方法可以实现这一点,但以下是您开始使用的领域: for循环 这将创建一个新列表 地图 这也将创建一个新列表 您还可以从R沿着数据帧列表进行变异 df,r,dplyr,R,Dplyr,您似乎在正确的轨道上,但是您替换原始列表中的元素的方式有点错误。虽然有多种方法可以实现这一点,但以下是您开始使用的领域: for循环 这将创建一个新列表 地图 这也将创建一个新列表 您还可以从purr包中查看 我希望其中一个能起到作用。这里有一个选项,可以从tidyverse Map(function(x) { mutate(x, new_col_one=first/(second * 2), new_col_two=first/(second
purr
包中查看
我希望其中一个能起到作用。这里有一个选项,可以从
tidyverse
Map(function(x) {
mutate(x,
new_col_one=first/(second * 2),
new_col_two=first/(second * 3))
}, ldf)
尝试:
ldf2如果它们的格式相同,只需使用ldf%>%bind_行(.id='id')
将它们转换为正常的数据帧。for
在这里是不好的样式,Map
通常用于多变量函数,虽然它作为单变量很好。也许你已经回答了这个问题……如果没有,我可以发布一个问题。有没有一种方法可以在不指定列名的情况下将mutate映射到所有列?例如,NewColumn1
,NewColumn2
我们可以动态命名它们,并为first/100
second/100
选择列,而不是命名它们。可以使用一些函数x/100
吗?x是该lsdf中的所有列吗?@user5249203。你可以查一下。您需要将mutate_if
更改为mutate_at(vars(…),list(New=~./100))
@user5249203。在这里,您可以使用mutate\u all
即map(ldf,~.x%>%mutate\u all(list(New=~./100))
for( i in seq_along(ldf)){
ldf[[i]] <- mutate( ldf[[i]], NewColumn1= ldf[[i]][1]/(ldf[[i]][2] *2),
NewColumn2= ldf[[i]][1]/(ldf[[i]][2] * 3))
}
for (df_name in names(ldf)) {
ldf[[df_name]] <- mutate(ldf[[df_name]],
new_col_one=first/(second * 2),
new_col_two=first/(second * 3))
}
lapply(ldf, function(x) {
mutate(x,
new_col_one=first/(second * 2),
new_col_two=first/(second * 3))
})
Map(function(x) {
mutate(x,
new_col_one=first/(second * 2),
new_col_two=first/(second * 3))
}, ldf)
library(tidyverse)
ldf %>%
map(~mutate(., NewColumn1 = first/(second*2), NewColumn2 = first/(second*3)))