我无法结合使用lapply和paste来组合列表中包含的多个数据帧的两列。我看了很多来源,但找不到答案。
这个答案 Apply paste over a list of vectors to get a list of strings是关于组合列表中的行,而不是组合列来获取向量。
此答案解释了如何选择列但不将它们粘贴在一起using lapply on a list of dataframes
此页面介绍了如何访问列表中的列,而不是如何将它们组合在一起https://www.datacamp.com/community/tutorials/r-tutorial-apply-family
这个答案是最接近的,但我不能对文字Performing an operation on multiple columns in a list of data
使用转换下面的代码是成功创建输出的示例,但不使用lapply。我将在许多不同的数据帧上应用此功能,因此需要使用lapply。据推测,我可以使用for i循环,但是lapply可能更干净。我需要使用lapply而不是sapply,因为数据帧将具有不同的长度。
我想用一个lapply函数替换启动output1,output2和output的三行,这个函数在本例中适用于两个数据帧。我认为它应该像
output <-lapply(mylist, paste($Artist,$Song))
但这不起作用。提前谢谢。
Artist <- c("Drake", "Ed Sheeran", "Bruno Mars", "Camilla Cabello", "BlocBoy")
Song <- c("Gods Plan", "Perfect", "Finesse", "Havana", "Look Alive")
Current <- data.frame(cbind(Artist,Song))
Artist <- c("Gucci Mane", "Migos", "Daft Punk", "Chainsmokers")
Song <- c("Black Beatles", "Bad and Boujee", "Starboy", "Closer")
Past <- data.frame(cbind(Artist,Song))
mylist <- list(Current,Past)
output1 <- paste(mylist[[1]]$Artist,mylist[[1]]$Song)
output2 <- paste(mylist[[2]]$Artist,mylist[[2]]$Song)
output <-list(output1,output2)
print(output)
答案 0 :(得分:3)
我认为这就是你的目标:
lapply(mylist, function(x) paste(x$Artist, x$Song, sep=" "))
我们只需要定义一个小的匿名函数来连接列。
[[1]]
[1] "Drake Gods Plan" "Ed Sheeran Perfect" "Bruno Mars Finesse"
[4] "Camilla Cabello Havana" "BlocBoy Look Alive"
[[2]]
[1] "Gucci Mane Black Beatles" "Migos Bad and Boujee"
[3] "Daft Punk Starboy" "Chainsmokers Closer"
答案 1 :(得分:1)
使用purrr::map
tidyverse
的解决方案
library(tidyverse)
map(list(Current, Past), ~ paste(.$Artist, .$Song))
[[1]]
[1] "Drake Gods Plan" "Ed Sheeran Perfect" "Bruno Mars Finesse"
[4] "Camilla Cabello Havana" "BlocBoy Look Alive"
[[2]]
[1] "Gucci Mane Black Beatles" "Migos Bad and Boujee" "Daft Punk Starboy"
[4] "Chainsmokers Closer"