![](/img/trans.png)
[英]Purr's best functions to conditionally select some columns and apply some function to its content
[英]Adding columns based on a specific function with (l)apply or purr on lists in a list?
我想在列表中的所有列表中添加基於 function 的列。
list1 <- list(A = c(1:10), B = c(rnorm(1:10)), C = c(rnorm(1:10)), D = c(rnorm(1:10)))
list2 <- list(A = c(1:10), B = c(rnorm(1:10)), C = c(rnorm(1:10)), D = c(rnorm(1:10)))
both_lists <- list(list1,list2)
both_lists <- lapply(both_lists, function(x) ... )
對於一個 dataframe (不在列表中)我通常使用:
df1 <- data.frame(A = c(1:10), B = c(rnorm(1:10)), C = c(rnorm(1:10)), D = c(rnorm(1:10)))
df2 <- data.frame(A = c(1:10), B = c(rnorm(1:10)), C = c(rnorm(1:10)), D = c(rnorm(1:10)))
df1 %>% mutate(max = do.call(pmax, c(select(., c(2:4)))))
但是我該如何為列表中的列表*執行此操作? 所以我想對列表中的所有列表做兩件事:
哦,還有誰能告訴我我實際上是如何更改列表中的列表名稱的? (所以將 list1 的名稱更改為集合中行名稱的名稱?EG 將列表的名稱設置為df1[[1]][1]
並用 lapply 對列表中的每個列表重復此操作?
使用lapply
你可以這樣做:
lapply(both_lists, function(x){x[['max']] <- do.call(pmax, x[2:4]); x})
output 看起來像這樣:
[[1]]
[[1]]$A
[1] 1 2 3 4 5 6 7 8 9 10
[[1]]$B
[1] 1.325128799 0.341702207 0.341139152 -0.630065889 0.799934566 0.427531770
[7] -1.492861023 2.643621022 0.008158055 -0.187956774
[[1]]$C
[1] -0.8535937 -0.1753520 1.1008905 -0.0385363 -1.6739434 0.2179597 -0.1300490 0.4177869
[9] 1.3066992 0.2369493
[[1]]$D
[1] 0.98472409 0.66930725 0.52449977 0.08553770 -1.81759549 -0.07564249 -0.63611958
[8] -1.19293507 -1.61571223 1.29777033
[[1]]$max
[1] 1.3251288 0.6693073 1.1008905 0.0855377 0.7999346 0.4275318 -0.1300490 2.6436210
[9] 1.3066992 1.2977703
[[2]]
...
假設 OP 中顯示的data.frame
s df1
和df2
位於名為dfl
的list
中:
library(dplyr)
library(magrittr)
dfl <- lapply(dfl, function(x){
x %<>% mutate(max = do.call(pmax, c(select(., c(2:4)))))
})
如果您想將list
元素的名稱設置為data.frame
中的某個值,也許是這樣的?
names(dfl) <- lapply(dfl, function(x){
x[2,2]
})
我希望這就是您的實際意思,因為您的問題對我來說有點不清楚。 (如果我錯了,請道歉。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.