我正尝试根据 Dataframe 中列的存在情况,向列表(包含~200个 Dataframe 的长列表)中的所有 Dataframe 添加一个新列。以iris数据集的修改和未修改版本为例,我正尝试为每个 Dataframe 添加一个名为“species_fixed”的新列。我尝试遵循的规则是:
1.如果列“Species”存在于 Dataframe 中,则为新列“species_fixed”添加来自该Species列的信息.
1.如果列“sp”存在于 Dataframe 中,则为新列“species_fixed”添加来自该sp列的信息。
1.如果这两个列名都不存在,则创建一个全部为NA的species_fixed列。
以下是我的尝试:
library(dplyr)
#Making a couple dataframes with various structures:
iris_1 <- iris %>% rename(sp = Species)
iris_2 <- iris %>% select(Sepal.Length, Sepal.Width)
iris_3 <- iris %>% mutate(species_2 = Species)
#Making them into a list:
iris_list <- list(iris, iris_1, iris_2, iris_3)
#Attempting to use lapply:
iris_list_fixed <- lapply(iris_list, function(q){
species_fixed = mutate(ifelse('Species' %in% names(q), Species, ifelse(
'sp' %in% names(q), sp, "NA"))
})
我想这一定需要lapply()、mutate()、ifelse()和其他可能的函数的某种组合,但我似乎不能完全实现它。
3条答案
按热度按时间bkhjykvo1#
下面是一个使用您自己的示例的工作示例:
gupuwyp22#
大体上类似于另一个答案,但定义一个命名函数并直接分配一个新列(在对
mutate
的调用之外)可能更简洁:643ylb083#
我想知道您是否可以使用
%||%
中缀。如果第一个值(列名)不存在,请尝试第二个值,如果不存在,则使用NA
。